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

在python中是否可以将列表转换为队列?,python,Python,如何将列表转换为队列?这样就可以执行入队或出队等操作。我想使用列表删除最上面的值,我相信可以使用队列来完成。您可以使用列表作为队列。如果需要fifo队列,只需使用.append()添加,使用.pop(0)删除即可。对于后进先出队列(即堆栈),使用.append()添加,使用.pop()删除 在实现专门为此目的而设计的fifo队列时,应该使用.pop(0)是一个O(n)操作。使用列表作为堆栈很好 先进先出队列: In [1]: q = range(15) In [2]: q.pop(0) Out[

如何将列表转换为队列?这样就可以执行入队或出队等操作。我想使用列表删除最上面的值,我相信可以使用队列来完成。

您可以使用列表作为队列。如果需要fifo队列,只需使用
.append()
添加,使用
.pop(0)
删除即可。对于后进先出队列(即堆栈),使用
.append()
添加,使用
.pop()
删除

在实现专门为此目的而设计的fifo队列时,应该使用
.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
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
后进先出队列:

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
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()


列表前面的pop不是很有效,因为列表中的所有引用都需要更新

将允许您高效地执行类似队列的操作

>>> from collections import deque
>>> deque([1,2,3,4])
deque([1, 2, 3, 4])

collections.deque是标准答案,尽管它的抽象性不是很好


如果你愿意牺牲一点速度来获得更好的抽象,还有一个问题。collections.deque速度更快。linked_list_mod允许您将iterable传递给构造函数;提供的后进先出模块和先进先出模块没有,但可以简单地进行修改以达到此目的。

因为我在使用
队列时正在寻找此问题的答案。队列
,我想我应该分享我的发现。可以使用
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中测试的。

所以我可以通过执行a=queue(list1)将列表放入队列,然后使用a进行任何进一步的队列引用吗?是的。deque是用iterable初始化的,iterable是一个列表,它主要支持普通列表所支持的所有操作。有关完整列表的信息,请参阅答案中的链接。对于大型列表,list_u2;.pop(0)的速度很慢。@dstromberg我相信这在我的答案中是隐含的。它很慢,剩下的每个元素都需要移动。您可能应该使用“从集合导入数据”而不是队列。队列模块主要用于多线程使用的队列中的消息。而deque是一个双端队列。