【问题标题】:Python: heapq.heappop() gives strange resultPython:heapq.heappop() 给出了奇怪的结果
【发布时间】:2017-02-02 22:57:43
【问题描述】:

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

【问题讨论】:

    标签: python heap heapq


    【解决方案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 关键字。

    【讨论】:

    • 谢谢,这确实是上面例子的问题。对于我的代码,我发现每次编辑堆时,我都需要再次使用 sort() 函数(我真傻)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2019-08-23
    相关资源
    最近更新 更多