如何在Python中重置列表迭代器?

5
例如,在C ++中,我可以执行以下操作:-
for (i = 0; i < n; i++){
    if(...){              //some condition
        i = 0;
    }
}

这将有效地重置循环,即重新开始循环而不引入第二个循环。
对于Python -
for x in a: # 'a' is a list
    if someCondition == True:
        # do something

在循环期间,'a'的长度可能会改变。因此,每当'a'的长度发生变化时,我想重新开始循环。我该如何做到这一点?


2
你可能需要使用 while 循环或递归。 - miradulo
在循环过程中,列表中的值是否被更改?您只是将值附加到末尾还是将值插入到列表中? - Sean Breckenridge
@SeanBreckenridge:根据某些条件,我正在将值附加到列表中。因此,每次我附加一个值,我希望循环重新开始。 - Rahul Sankar
@miradulo:但是为此,我需要一个变量来跟踪我的列表的长度。没有其他方法吗? - Rahul Sankar
2个回答

9
你可以定义自己的迭代器,使其可以被倒回:
class ListIterator:
    def __init__(self, ls):
        self.ls = ls
        self.idx = 0
    def __iter__(self):
        return self
    def rewind(self):
        self.idx = 0
    def __next__(self):
        try:
            return self.ls[self.idx]
        except IndexError:
            raise StopIteration
        finally:
            self.idx += 1

使用方法如下:

li = ListIterator([1,2,3,4,5,6])
for element in li:
    ... # do something
    if some_condition:
        li.rewind()

4

不使用 for,而是手动使用 while 循环:

n = len(a)
i = 0
while i < n:
  ...
  if someCondition:
    n = len(a)
    i = 0
    continue
  i+=1

编辑 - 如果您只是在末尾添加,那么您真的需要重新开始吗?您可以通过直接比较ilen(a)或在循环中调用n=len(a)来将终点线向后移动。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接