我想獲取隊列中的下一個項目,但我不想將其退出。在Python的優先隊列中可能嗎?從docs,我不知道該怎麼辦我可以在不刪除PriorityQueue的情況下獲得一個項目嗎?
19
A
回答
1
當您按照理論從隊列中獲取物品時,它將從隊列中移除。你必須編寫自己的函數,它會給你PriorityQueue的最後一個元素。您可以通過繼承priorityqueue來創建一個peek函數。
2
索引隊列的第一個元素應該工作。如果您使用的heapq
庫,文件中提到:
堆的有趣的特性是,它的最小元素始終是根,
heap[0]
。
23
如果是一個PriorityQueue對象,你可以使用a.queue [0],以獲得下一個項目:
from Queue import PriorityQueue
a = PriorityQueue()
a.put((10, "a"))
a.put((4, "b"))
a.put((3,"c"))
print a.queue
print a.get()
print a.queue
print a.get()
print a.queue
輸出爲:
[(3, 'c'), (10, 'a'), (4, 'b')]
(3, 'c')
[(4, 'b'), (10, 'a')]
(4, 'b')
[(10, 'a')]
,但要小心的多線程訪問。
3
如果你想在時Queue下一個元素,在元素的插入順序,使用方法:
for i in range(len(queue)):
print queue.queue[i]
這不會彈出任何東西了。
如果你想它的優先級順序,使用方法:
for i in range(len(queue)):
temp = queue.get()
queue.put(temp)
print temp
如果您正在使用的,而不是一個變量的元組,通過更換溫度:
((temp1,temp2))
+0
此解決方案不僅限於PriorityQueue對象。它也適用於Queue對象。看起來像我最優雅的解決方案。沒有任何意圖,但我不明白其他答案如何接近這個(imho)。 – MikeyE 2017-03-22 02:48:43
0
假設存儲在您的項目在PriorityQueue中是一個元組(key,value),
def peak(pq):
return pq.queue[0][1]
相關問題
- 1. 我可以在不刪除任何屬性的情況下刪除對象嗎?
- 2. 我可以在沒有授權的情況下獲得曲目嗎?
- 3. 是否可以在不刪除的情況下修改地圖中的項目?
- 4. 我可以在不刪除MongoDB的情況下修改現有索引嗎?
- 5. 我可以在不使用約束的情況下刪除外鍵嗎?
- 6. 我們可以在不使用UIpageviewcontoller的情況下獲得頁面樣式嗎?
- 7. 我可以在不離開vim的情況下獲得root權限嗎?
- 8. 如何在不刪除它的情況下獲得deque的第一個值?
- 9. 在不知道ItemName的情況下從SimpleDB中刪除項目?
- 10. 我可以在沒有AVD的情況下運行android項目
- 11. 如何在不刪除文件的情況下從netbeans中刪除項目?
- 12. 我可以在不影響作業的情況下使用qsub提交它後刪除一個shell腳本嗎?
- 13. 我可以在不使用DLL的情況下使用同一個項目中的UserControl嗎?
- 14. 我可以在沒有config.xml文件的情況下打開PhoneGap項目嗎?
- 15. 我可以在不重新啓動我的項目的情況下添加servlet
- 16. 我可以在不需要文件的情況下填充一個函數嗎?
- 17. 我可以在不拋出它的情況下實例化一個異常嗎?
- 18. 我們可以在不定義tf.placeholder的情況下提供一個值嗎?
- 19. 您可以在不使用API的情況下獲得MailChimp興趣組ID嗎?
- 20. 我可以在不寫函數的情況下使用scrollTop嗎?
- 21. 我可以在不登錄的情況下應用gsettings嗎?
- 22. 我可以在不使用IDE的情況下發布嗎?
- 23. 我可以在不使用SqPaymentForm的情況下請求Card_Nonce嗎?
- 24. 我可以在不使用xterm的情況下啓動clisp嗎?
- 25. 我可以在不重定向的情況下重寫URL嗎?
- 26. 我可以在不使用Composer的情況下安裝Laravel嗎?
- 27. 我可以在不安裝的情況下使用git嗎?
- 28. 在不知道目錄C的情況下刪除一個子目錄#
- 29. 我可以避免在以下情況下覆蓋方法嗎?
- 30. 我可以在不觸摸工作目錄的情況下導入補丁嗎?
假設我擴展了PriorityQueue,我仍然需要訪問下層數據存儲實施高峯權利?但是如何? – 2012-02-15 05:06:42
如果你可以檢查代碼http://hg.python.org/cpython/file/2.7/Lib/Queue.py,那麼他們使用列表來存儲數據。所以你可以在列表中隨意玩這個列表,在這個例子中它是'self.queue'。另外你可以檢查'_get'方法的PriorityQueue,所以如果你想改變那個功能,那麼也可以重寫那個函數。 – Nilesh 2012-02-15 05:19:52
是和python一樣的cpython嗎? – 2012-02-15 08:05:10