Python列表可以在迭代过程中发生变化,但不能进行deque.为什么



我需要识别数据结构中满足条件的元素,将它们保存在某个地方,最后从原始结构中删除。因此,我用循环代替理解。

当试图用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?附加/插入两者都适用。

我目前正在处理一个由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)

相关内容

最新更新