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

时间:2018-05-19 16:50:42

标签: python list loops iteration

例如,在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 个答案:

答案 0 :(得分:4)

您可以定义自己的倒带器,可以倒带:

"./node_modules/jquery/dist/jquery.js",
"./node_modules/tether/dist/js/tether.js",
"./node_modules/bootstrap/dist/js/bootstrap.js"

像这样使用:

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

答案 1 :(得分: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)来进一步移动终点