Python: heapq.heappop() 给出奇怪的结果
Python: heapq.heappop() gives strange result
我正在尝试在我的程序中使用 Python 模块 heapq
,但我 运行 使用 heapq.heappop()
遇到了 st运行ge 问题。该函数似乎没有return 堆中的最小元素。看看下面的代码:
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()
不应该先return[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
,但我 运行 使用 heapq.heappop()
遇到了 st运行ge 问题。该函数似乎没有return 堆中的最小元素。看看下面的代码:
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()
不应该先return[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
关键字。