繁体   English   中英

Python 列表可以在迭代过程中发生变化,但不能在双端队列中发生变化。 为什么?

[英]Python list can be mutated during iteration but not deque. Why?

我需要识别数据结构中满足条件的元素,将它们保存在某处,最后从原始结构中删除。 因此,我使用 for 循环而不是理解。

尝试使用 deque 重新实现该过程时,出现以下错误:RuntimeError: deque 在迭代期间发生变异。

from collections import deque

def foo1(x):
    pass

myDeque = deque([i for i in range(200)])  # i is in fact a complex, nested data structure

for index, e in enumerate(reversed(myDeque)):
    if e % 2 == 0: # also more complex logic
        foo1(e)
        # myDeque.pop(index) # TypeError: pop() takes no arguments (1 given)
        del myDeque[index] # RuntimeError: deque mutated during iteration
    

为什么我可以在迭代期间改变列表而不是双端队列? 附加/插入在两者中都有效。

我目前正在使用从 deque 构建的临时列表。

from collections import deque

def foo1(x):
    pass

myDeque = deque([i for i in range(200)])

temp = list(myDeque)
for index, e in enumerate(reversed(temp)):
    if e % 2 == 0:
        foo1(e)
        temp.pop(index - 1)
myDeque = deque(temp)

解决方法:创建临时列表

from collections import deque

def foo1(x):
    pass

myDeque = deque([i for i in range(200)])

temp = list(myDeque)
for index, e in enumerate(reversed(temp)):
    if e % 2 == 0:
        foo1(e)
        temp.pop(index - 1)
myDeque = deque(temp)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM