为了账号安全,请及时绑定邮箱和手机立即绑定

出现IndexError时使数组重复

出现IndexError时使数组重复

潇潇雨雨 2021-04-06 13:10:57
当代码抛出IndexError时,我希望数组循环。这是示例:a = [1, 2, 3, 4, 5]a[x] -> output0 -> 11 -> 2...4 -> 5after except IndexError5 -> 16 -> 2...9 -> 510 -> IndexError (Should be 1)我的代码可以工作,但是当pos> 9时,它仍会引发IndexError。pos = 5try:    a = [1, 2, 3, 4, 5]    print(a[pos])except IndexError:    print(a[pos - len(a)])
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

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


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


In [21]: pos = 9


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

Out[22]: 5


查看完整回答
反对 回复 2021-04-27
?
RISEBY

TA贡献1856条经验 获得超5个赞

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


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


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


except IndexError:

    print(a[pos % len(a)])

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


查看完整回答
反对 回复 2021-04-27
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-04-27
  • 3 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信