2017-10-08 73 views
-1

我最初嘗試使用優先級隊列編寫一個算法來解決15個難題,但我的教師告訴我們,我們被要求寫一個*實現,並建議我們使用heapq而不是優先級隊列。我很難找到我的heapq的長度/大小,並且訪問我的heapq的元素。我的印象是,通過使用heapq,您將能夠訪問heapq中您無法在優先級隊列中訪問的元素。但是,似乎沒有任何方法可以從heapq中查找長度/檢索元素。你們有沒有人知道一種方法來獲得heapq的長度/元素或者更適合這種情況的數據結構?訪問heapq的索引和長度?

回答

1

heapq堆只不過是其元素尊重特殊(非唯一)順序的列表。

您可以像使用其他列表一樣使用len(heap)

In [1]: import heapq 
In [2]: heap = [40, 10, 20, 30] 
In [3]: heapq.heapify(heap) 
In [4]: heap 
Out[4]: [10, 30, 20, 40] 

In [5]: heapq.heappop(heap) 
Out[5]: 10 

In [6]: heap 
Out[6]: [20, 30, 40] 

In [7]: len(heap) 
Out[7]: 3 

你也應該閱讀the python documentation for heapq:在example section應當關心你。