在python中是否可以将列表转换为队列?
如何将列表转换为队列?这样就可以执行入队或出队等操作。我想使用列表删除最上面的值,我相信可以使用队列来完成。您可以使用列表作为队列。如果需要fifo队列,只需使用在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[
.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是一个双端队列。