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