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

2024-09-26 22:42:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我的第一个解决方案是这样的,但它没有像我扩展到的那样工作。我的意思是,我想向这个集合中添加一些项目,集合仍然能够遍历剩余的项目和新的项目。例如,如果我已进入e_closure_状态,最后是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

Tags: 项目inselfforlenifrangefunction
1条回答
网友
1楼 · 发布于 2024-09-26 22:42:31

你明确要求的事情是做不到的;在迭代时修改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

相关问题 更多 >

    热门问题