来自heappop的不寻常结果?

时间:2016-04-26 22:06:23

标签: python python-2.7 heap

我将一个简单的堆定义为列表列表。我使用 heapq 模块中的 heapop 来提取具有最小键的列表(我学到的是隐式内部列表的第一个元素)。但在下面的例子中,pop操作似乎给出了不寻常的结果。

有人可以解释原因吗?

  

heap = [[0,0,0],[inf,1,1],[inf,2,2],[5,3,3],[inf,4,4]]

     

heapq.heappop(堆)

[0,0,0]

  

heapq.heappop(堆)

[inf,1,1]

  

heapq.heappop(堆)

[5,3,3]

  

heapq.heappop(堆)

[inf,2,2]

  

heapq.heappop(堆)

[inf,4,4]

1 个答案:

答案 0 :(得分:5)

问题是您在不是堆的列表上使用heapq。 documentation讨论了使用heapify命令,确实有效:

>>> import heapq
>>> from numpy import inf
>>> heap=[[0, 0, 0], [inf, 1, 1], [inf, 2, 2], [5, 3, 3], [inf, 4, 4]]
>>> heapq.heapify(heap)
>>> heap
[[0, 0, 0], [5, 3, 3], [inf, 2, 2], [inf, 1, 1], [inf, 4, 4]]
>>> heapq.heappop(heap)
[0, 0, 0]
>>> heapq.heappop(heap)
[5, 3, 3]
>>> heapq.heappop(heap)
[inf, 1, 1]
>>> heapq.heappop(heap)
[inf, 2, 2]
>>> heapq.heappop(heap)
[inf, 4, 4]