为什么删除双端队列失败的元素?
why remove element of deque Fail?
我运行代码如下:
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?
您不能在迭代时编辑双端队列。如果你想一个一个地删除它的元素,你必须迭代它的一个副本:
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()
您无法在迭代时修改 deque
。
队列的典型模式是使用 while
循环,并从所需的一端删除项目,使用 deque.pop()
或 deque.popleft()
。
例如:
>>> 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
我运行代码如下:
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?
您不能在迭代时编辑双端队列。如果你想一个一个地删除它的元素,你必须迭代它的一个副本:
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()
您无法在迭代时修改 deque
。
队列的典型模式是使用 while
循环,并从所需的一端删除项目,使用 deque.pop()
或 deque.popleft()
。
例如:
>>> 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