Joh*_*ooy 14
从列表的前面弹出效率不高,因为列表中的所有引用都需要更新.
deque将允许您有效地排队操作
>>> from collections import deque
>>> deque([1,2,3,4])
deque([1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)
由于我在使用时一直在寻找这个问题的答案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)
Run Code Online (Sandbox Code Playgroud)
此代码后一直运行,q并且q2是包含完全相同的条目两个不同的队列,但与第二种方法是>快300倍我的机器上。
与问题无关,但相反的是l = list(q.queue)if q是的实例queue.Queue。希望这可以为您节省一些麻烦!
所有这些都在python 3.5.2中进行了测试。
您可以使用列表作为队列。如果你想要一个fifo队列,只需使用.append()add和.pop(0)remove即可。对于 lifo 队列(即堆栈),使用.append()添加和.pop()删除。
在实现专门为此目的设计的 fifo 队列时,您应该使用collections.deque 。.pop(0)是一个 O(n) 操作。使用列表作为堆栈就可以了。
先进先出队列:
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
Run Code Online (Sandbox Code Playgroud)
后进先出队列:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17811 次 |
| 最近记录: |