![](/img/trans.png)
[英]How to fix RuntimeError: deque mutated during iteration in 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.