有没有办法通过一个集合,同时添加项目并迭代它们?

Is there a way to go through a set and on the same time adding items and iterate them also?

我的第一个解决方案是这个,但它没有按照我预期的方式工作。我的意思是我想向这个集合中添加一些项目,并且该集合仍然能够遍历剩余的项目以及新的 item/s。例如,如果我进入 e_closure_statesFinal nums {2,3} 并且在 if 语句之后将添加数字 5 我希望第一个 for 循环也遍历 {2,3} 和 5。提前致谢,如果我无法理解,请抱歉。

for nextstate in e_closure_statesFinal:
        print(nextstate)
        for y in range(state,len(self.states)+ 1):
            if ((nextstate, '@') in self.transition_function.keys()):
               e_closure_statesFinal  = e_closure_statesFinal|self.transition_function[(nextstate, '@')]
            else :
                break

第二个解决方案有效,但我想知道是否有更快的方法。

 i = 0
    while i < len(e_closure_statesFinal):
    for nextstate in e_closure_statesFinal:
        for y in range(state,len(self.states)+ 1):
            if ((nextstate, '@') in self.transition_function.keys()):
                e_closure_statesFinal  = e_closure_statesFinal |self.transition_function[(nextstate, '@')]
                else :
            break
    i += 1

您的具体要求无法完成;在迭代时修改 set 是被禁止的(即使它有效,Python 的 set 的性质是新元素可以出现在已经迭代的元素之前或之后,所以它不会一致,这就是为什么禁止这样做的部分原因)。你可以想象 运行 一个嵌套循环 运行 在原始 set 的副本上,然后 运行 在结果 set 和原始之间的差异上,诸如此类:

workingset = {...}
lastset = set()
while lastset != workingset:  # Until a run doesn't change workingset
    newelems = workingset - lastset
    lastset = workingset.copy()
    for elem in newelems:  # Run over all new elements in workingset
        ... do stuff ...
        if somecondition:
             workingset.add(someelem)  # Maybe add stuff to workingset