如何將列表轉換爲隊列?這樣就可以執行入隊或出隊等操作。我想用列表來刪除最上面的值,我相信它可以使用隊列來完成。是否有可能將列表轉換爲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