可以在python中将列表转换为队列吗?

rgg*_*god 15 python

如何将列表转换为队列?这样就可以进行入队或出队等操作.我想使用列表删除最顶层的值,我相信它可以使用队列完成.

Joh*_*ooy 14

从列表的前面弹出效率不高,因为列表中的所有引用都需要更新.

deque将允许您有效地排队操作

>>> from collections import deque
>>> deque([1,2,3,4])
deque([1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)


gef*_*fei 6

只是使用 pop()

>>> x = [1,2,3]
>>> x.pop(0)
1
>>> x
[2,3]
Run Code Online (Sandbox Code Playgroud)


max*_*axb 5

由于我在使用时一直在寻找这个问题的答案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中进行了测试。

  • 您可能应该使用“from collections import deque”而不是队列。队列模块主要用于多个线程使用的队列中的消息。而deque是双端队列。 (2认同)

msv*_*kon 1

您可以使用列表作为队列。如果你想要一个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)