class F:
def __init__(self,int_set):
self.set = int_set
def __iter__(self):
new_set = self.set
for x in sorted(new_set):
yield x
new_set = self.aset
这对于初始集来说效果很好。但是,我希望能够在使用 next() 迭代集合时迭代集合的突变
请您参考如下方法:
这是对变异集进行安全迭代的尝试:
class F(object):
def __init__(self, int_set):
self.set = int_set
def __iter__(self):
seen = set()
keep_going = True
while keep_going:
keep_going = False
# iterate over as-yet-unseen items
for item in self.set - seen:
if item not in self.set:
# item removed from the set, skip it
continue
yield item
seen.add(item)
keep_going = True
这个想法是循环遍历该集合的副本,具有以下规定:
- 如果在迭代过程中从集合中删除了一个项目,则跳过它;
- 在用尽所有项目后,再次循环,以覆盖已添加到集合中的新项目(但忽略重复项);
- 当没有看到新项目时,停止迭代。
