Skip to main content
 首页 » 编程设计

python之使用 __iter__ 类,允许某人调用 next() 同时修改集合

2024年10月25日35unruledboy

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 

这个想法是循环遍历该集合的副本,具有以下规定:

  • 如果在迭代过程中从集合中删除了一个项目,则跳过它;
  • 在用尽所有项目后,再次循环,以覆盖已添加到集合中的新项目(但忽略重复项);
  • 当没有看到新项目时,停止迭代。