python - 为什么要删除双端队列失败的元素?
问题描述
我运行代码如下:
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?
解决方案
您不能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
推荐阅读
- magento - Magento 2 国家/地区的自动语言重定向
- android - Android O及以上版本是否可以动态调整通知音量?
- hadoop - 如何找到由 oozie (hadoop) 作业运行的 hadoop 应用程序
- javascript - 为什么我不能将参数传递给 addEventListener 中的匿名函数,如何解决?
- twilio - 无法通过 Twilio REST API 检索传入的电话号码
- php - 从php多维数组中的json获取嵌套数据
- groovy - Groovy - 访问具有另一个变量值的变量
- java - 列表的 BinaryOperator
添加列表 - python - Python:`validators.url` 不接受 1-9 的端口号,但接受大于 65535 的端口?
- mysql - 如何连接两个表但不重复mysql中的行