如何在触发StopIteration或到达列表指定位置后重新从头迭代列表
实现列表无限循环迭代的方案
该需求完全可以实现,以下是几种可行的实现方式:
方案1:使用Python标准库itertools.cycle(最简洁)
itertools.cycle是官方提供的专门用于无限循环迭代序列的工具,会自动在遍历完序列后回到开头重新迭代:
from itertools import cycle my_list = ["Test Subject 1", "Test Subject 2","Test Subject 3","Test Subject 4"] my_iter = cycle(my_list) while True: print(next(my_iter))
方案2:手动捕获StopIteration异常重置迭代器
如果不想引入额外标准库,可以自己处理迭代器耗尽的异常,触发异常时重新生成迭代器即可:
my_list = ["Test Subject 1", "Test Subject 2","Test Subject 3","Test Subject 4"] my_ListIter = iter(my_list) while True: try: print(next(my_ListIter)) except StopIteration: # 迭代器耗尽时重新生成新的迭代器 my_ListIter = iter(my_list)
方案3:使用索引取模实现循环
也可以不使用迭代器,通过索引取模的方式控制遍历位置,实现循环效果:
my_list = ["Test Subject 1", "Test Subject 2","Test Subject 3","Test Subject 4"] index = 0 list_length = len(my_list) while True: print(my_list[index]) index = (index + 1) % list_length
原代码错误原因说明
你之前的代码混淆了迭代器对象和列表元素的概念:my_ListIter是迭代器实例,不是当前遍历到的元素,if my_ListIter := (my_list[3])的逻辑完全不符合需求,海象运算符在这里的用法也不匹配使用场景。
内容的提问来源于stack exchange,提问作者Quaide Watton
相关产品推荐
相关产品推荐

