为什么删除deque元素失败?

时间:2018-04-30 09:35:38

标签: python deque

我运行代码如下:

q = deque([4,5,6,7,8])
for e in q:
    print("remove the {0}".format(e))
    q.remove(e)

Traceback (most recent call last):
  File "C:\Program Files\Python365\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-18-63a1d575cfeb>", line 1, in <module>
    for e in q:
RuntimeError: deque mutated during iteration
remove the 4

为什么要引发RuntimeError?

2 个答案:

答案 0 :(得分:2)

在迭代它时,您无法修改deque

包含队列的典型模式是使用while循环代替,并使用deque.pop()deque.popleft()从所需结尾中删除项目。

E.g:

>>> q = deque([4,5,6,7,8])
>>> while q:
...     element = q.pop()
...     print('removed {}'.format(element))
...
removed 8
removed 7
removed 6
removed 5
removed 4

或:

>>> q = deque([4,5,6,7,8])
>>> while q:
...     element = q.popleft()
...     print('removed {}'.format(element))
...
removed 4
removed 5
removed 6
removed 7
removed 8

答案 1 :(得分:0)

迭代时无法编辑双端队列。如果要逐个删除其元素,则必须迭代它的副本:

q = deque([4,5,6,7,8])
copy = list(q)

for e in copy:
    print("remove the {0}".format(e))
    q.remove(e)

或者,如果您想一次删除所有元素:

q.clear()