如何将列表转换为队列?这样就可以执行入队或出队等操作。我想用列表来删除最上面的值,我相信它可以使用队列来完成。是否有可能将列表转换为Python中的队列?
回答
您可以使用列表作为队列。如果您想要一个fifo队列,只需使用.append()
添加并且.pop(0)
即可删除。对于lifo队列(即堆栈),请使用.append()
添加并将.pop()
删除。
在实现专门为此目的而设计的fifo队列时,您应该使用collections.deque。 .pop(0)
是O(n)操作。使用列表作为堆栈就好了。
FIFO队列:
In [1]: q = range(15)
In [2]: q.pop(0)
Out[2]: 0
In [3]: q.pop(0)
Out[3]: 1
In [4]: q.pop(0)
Out[4]: 2
LIFO队列:
In [5]: q = range(10)
In [6]: q.pop()
Out[6]: 9
In [7]: q.pop()
Out[7]: 8
In [8]: q.pop()
Out[8]: 7
只使用pop()
>>> x = [1,2,3]
>>> x.pop(0)
1
>>> x
[2,3]
它的速度很慢,每个元素都需要移动 –
collections.deque是标准答案,但它不是抽象的非常好。
还有https://pypi.python.org/pypi/linked_list_mod/,如果你愿意牺牲一点速度以获得更好的抽象。 collections.deque更快。 linked_list_mod让你将一个迭代器传递给构造器;提供的lifo和fifo模块不会,但可以进行细微的修改。
由于我在使用queue.Queue
寻找这个问题的答案,我想我应该分享我的发现。可以使用queue.queue
将列表转换为队列。
import queue
l = [i for i in range(1000)]
q = queue.Queue()
[q.put(i) for i in l]
q2 = queue.Queue()
q2.queue = queue.deque(l)
此代码后一直跑,q
和q2
是包含完全相同的条目两个不同的队列,但与第二种方法是>快300倍我的机器上。
与问题无关,但如果q
是queue.Queue
的实例,则可以通过l = list(q.queue)
完成相反的操作。希望这可以为您节省一些麻烦!
这全部在python 3.5.2中测试过。
- 1. 将队列转换为列表
- 2. 将列表转换为队列
- 3. 是否有可能将转换列表改进为有序地图?
- 4. 在python中将列表和列表的列表转换为csv
- 5. 将列表转换为Python中的* args
- 6. 将Python列表转换为CSV列
- 7. 是否有可能有一个列表转换器?
- 8. 将CSV列转换为Python中的列表列表
- 9. 是否有可能将MVC C#列表<int>转换为javascript数组?
- 10. 转换队列到列表
- 11. 是否可以将`integral_constant`列表转换回`T`列表?
- 12. 是否有可能将此Python代码转换为单行
- 13. 是否有可能将Scala方法转换为python方法
- 14. 是否有可能将QVariants自动转换为Python对象?
- 15. 如何将'从队列导入队列,空'从Python 2转换为Python 3?
- 16. 将列表字典列表转换为Python中的DataFrame表
- 17. Python将列表的列表转换为元组列表
- 18. 是否可以将泛型列表转换为其子类的列表?
- 19. 是否可以将字符串列表转换为变量列表的参数?
- 20. 如何将列表的列表转换为Python中的字典?
- 21. Python - 是否可以将()插入列表中的列表中?
- 22. 是否有可能在sql server中将字符串列转换为datetime?
- 23. 将textarea的值转换为python列表
- 24. 将列表中的日期转换为列;可能没有动态SQL?
- 25. 如何将3D列表转换为Python中的2D列表?
- 26. 将列表转换为Python中列表的字典
- 27. 将元组列表转换为Python中的多个列表
- 28. 将字符串查找列表转换为Python中的列表
- 29. 将列表转换为Python中的列表字典
- 30. 将文本文件转换为python列表中的列表
list_.pop(0)对于大型列表很慢。 – dstromberg
@dstromberg我相信这是暗示在我的答案。 – msvalkon