Python:heapq.heappop()给出了奇怪的结果

时间:2016-09-25 15:29:43

标签: python heap pop

我试图在我的程序中使用Python模块heapq但是我使用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 个答案:

答案 0 :(得分: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关键字。