簡體   English   中英

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

[英]How do I reset a list iterator in Python?

例如,在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'的長度發生變化時,我都想開始循環。 我該怎么做呢?

您可以定義自己的迭代器,可以重繞:

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()

不使用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)來進一步移動終點線

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM