首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >添加到在Python中迭代的deque?

添加到在Python中迭代的deque?
EN

Stack Overflow用户
提问于 2015-05-07 16:49:10
回答 2查看 10.2K关注 0票数 18

我在Python中有一个缺陷,我正在迭代它。有时,当我交互时,这种缺陷会发生变化,这会产生一个RuntimeError: deque mutated during iteration

如果这是Python列表而不是deque,我只会迭代列表的一个副本(通过像my_list[:]这样的片),但是由于片操作不能在deques上使用,我想知道处理这个问题最重要的是什么?

我的解决方案是导入复制模块,然后迭代一个副本,比如for item in copy(my_deque):,这很好,但是由于我搜索了这个主题,所以我想在这里发帖询问?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-07 17:01:57

您可以通过创建列表来“冻结”它。没有必要把它复制到一个新的设备上。列表当然足够好,因为您只需要它来迭代。

代码语言:javascript
运行
复制
for elem in list(my_deque):
    ...

list(x)从任何可迭代的x (包括deque )中创建一个列表,在大多数情况下,这是最重要的仿生方法。

请记住,只有在同一个线程(即循环内部)中修改deque时,此解决方案才有效。否则,请注意,list(my_deque)不是原子的,而且还在对deque进行迭代。这意味着,如果另一个线程在运行时更改deque,则会导致相同的错误。如果您处于多线程环境中,请使用锁。

票数 20
EN

Stack Overflow用户

发布于 2018-09-15 05:24:47

虽然您可以从deque ( for elem in list(deque) )中创建一个列表,但如果它是一个经常使用的函数,这并不总是最优的:特别是它的性能成本。如果deque中有大量元素,并且您正在不断地将其更改为array结构。

一种不需要创建列表的可能选择是使用带有布尔变量的while循环来控制条件。这提供了O(1)的时间复杂度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30107212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档