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

标签 python heap heapq

我试图在我的程序中使用 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'] 吗?

最佳答案

你应该 "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 关键字。

关于Python:heapq.heappop() 给出奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39688599/

相关文章:

python - 在python中的字典中切换键和值

python - dlltool:无法创建 .lib 文件:libpython27.a:无效的 bfd 目标

python - 如何将 Huey 连接到 Flask 应用程序

algorithm - 两个最大堆的交集

python-3.x - TypeError : on heapq. heapop on python3 但在 python2 中工作

python - self.assertTrue(False) 到底测试了什么

algorithm - 跟踪扩展数组的中位数

pmap结果中的堆VS匿名内存

python - Dijkstra 的 SPF 算法中两个顶点(节点)实例之间的类型错误

python - 为什么 K 最近点到原点的堆比排序慢?