首页 > 解决方案 > 如何重置迭代集合的循环?

问题描述

如何重置迭代集合的循环?迭代列表的常见答案是重置您用于访问列表的索引,但是集合不支持索引。

关键是能够迭代大量对象,对每个元素执行一些操作,直到结果与我需要的结果匹配。我正在寻找的功能是重置循环的能力。这意味着从头开始重新开始迭代,以确保我出于任何原因再次访问每个元素。

如何重置以下循环?

for element in some_set:
   print element
   if element + offset == needed_result:
      # reset

我正在使用 python 2.7 来解决这个特定问题,但我也欢迎使用 python 3 解决方案。

标签: pythonpython-3.xpython-2.7loopsset

解决方案


一种方法是使用迭代器iter()您可以通过简单地调用您的集合来定义一个迭代器,并next在每次迭代时调用它的方法。当满足条件时,您可以简单地从集合中再次创建迭代器对象并重复该过程:

s = {1,2,3,4,5}
s_ = iter(s)
# Just a counter to avoid endless loop
cont = 0
while cont < 10:
    try:
        i = next(s_)
    except StopIteration:
        break
    # Some condition
    if flag == True: 
        # Reset the iterator when the condition is met
        s_ = iter(s) 
        continue
    cont += 1

推荐阅读