我在Python中有一个deque,我正在迭代.有时候,当我正在进行交互时,deque会发生变化RuntimeError: deque mutated during iteration.
如果这是一个Python列表而不是一个双端队列,我只是迭代一个列表的副本(通过一个切片my_list[:],但由于切片操作不能用于deques,我想知道什么是最pythonic处理这个的方法是?
我的解决方案是导入复制模块,然后迭代一个副本,这样for item in copy(my_deque):很好,但因为我搜索了这个主题的高低,我想我会在这里发帖询问?
shx*_*hx2 14
您可以通过创建列表来"冻结"它.没有必要将其复制到新的双端队列.列表肯定是足够好的,因为你只需要它来进行迭代.
for elem in list(my_deque):
...
Run Code Online (Sandbox Code Playgroud)
list(x)从任何迭代创建一个列表x,包括deque,在大多数情况下是最pythonic的方式.
请记住,只有在同一个线程(即循环内部)中修改了双端队列时,此解决方案才有效.否则,请注意这list(my_deque)不是原子的,并且也在遍历deque.这意味着如果另一个线程在运行时改变了双端队列,则最终会出现相同的错误.如果您处于多线程环境中,请使用锁定.