出现IndexError时使数组重复

时间:2018-07-09 04:40:02

标签: python python-3.x list circular-list

当代码抛出IndexError时,我希望数组循环。 这是示例:

a = [1, 2, 3, 4, 5]

a[x] -> output
0 -> 1
1 -> 2
...
4 -> 5
after except IndexError
5 -> 1
6 -> 2
...
9 -> 5
10 -> IndexError (Should be 1)

我的代码可以工作,但是当pos> 9时,它仍然抛出IndexError。

pos = 5
try:
    a = [1, 2, 3, 4, 5]
    print(a[pos])
except IndexError:
    print(a[pos - len(a)])

3 个答案:

答案 0 :(得分:4)

如果要使用循环迭代器,请使用itertools.cycle。如果仅在索引时需要循环行为,则可以使用基于模的索引。

In [20]: a = [1, 2, 3, 4, 5]

In [21]: pos = 9

In [22]: a[pos % len(a)]
Out[22]: 5

答案 1 :(得分:0)

这是因为当pos > 4 and pos < 10时,您的代码引发IndexError异常,然后运行a[pos - len(a)],它将给出所需的结果。

但是,当pos >= 10时,控件将转到Except块,但是语句a[pos - len(a)]也将给出IndexError异常,因为pos - len(a)将大于4,因为len(a)是一个常数。

我建议您实现一个循环迭代器,关于该循环迭代器在他的回答中提到了Coldspeed,或者如果您想采用这种方法,则可以执行以下操作:

except IndexError:
    print(a[pos % len(a)])

P.S。您也不需要将整个内容放在try-except块中。 ^。^

答案 2 :(得分:0)

您要打印a[pos % len(a)],而不是a[pos - len(a)],因为任何大于10减5的值都大于5。