有没有一种方法可以遍历集合,同时添加项目并对其进行迭代?

时间:2019-10-31 21:48:33

标签: python set nfa

我的第一个解决方案是这个,但它没有达到我的预期。我的意思是,我想向此集合中添加一些项目,并且该集合仍将能够遍历其余项目以及新项目。例如,如果我将数字{2,3}放入e_closure_statesFinal中,并且在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

1 个答案:

答案 0 :(得分:0)

您具体要求的无法完成;禁止在迭代时修改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 之间的差异,等等。

!pip install --upgrade --force-reinstall --no-deps kaggle