2016-09-25 163 views
1

我試圖在我的程序中使用Python模塊heapq,但我遇到了一個奇怪的問題,使用heapq.heappop()。該函數似乎不返回堆中的最小元素。看看下面的代碼:Python:heapq.heappop()給出奇怪的結果

Python 2.7.12 (default, Jul 1 2016, 15:12:24) 
[GCC 5.4.0 20160609] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import heapq 
>>> list = [[1326, 'a'], [654, 'b']] 
>>> print heapq.heappop(list) 
[1326, 'a'] 
>>> print heapq.heappop(list) 
[654, 'b'] 

應該heappop()不會返回[654, 'b'][1326, 'a']

回答

1

你應該先"heapify"列表(就地操作):

In [1]: import heapq 

In [2]: l = [[1326, 'a'], [654, 'b']] 

In [3]: heapq.heapify(l) 

In [4]: heapq.heappop(l) 
Out[4]: [654, 'b'] 

In [5]: heapq.heappop(l) 
Out[5]: [1326, 'a'] 

而且,避免命名列表爲list - 你是陰影內置list關鍵字。

+0

謝謝,這確實是上述例子的問題。對於我的代碼,我發現每次編輯堆時,都需要再次使用sort()函數(愚蠢的我)。 – jpaulus