【问题标题】:Python HeapPushPop not popping minimum elementPython HeapPushPop 没有弹出最小元素
【发布时间】:2022-01-27 15:52:01
【问题描述】:

我觉得我一定是误解了 heappushpop,因为我无法弄清楚为什么会发生这种情况。

sequence = [2, 6, 4, 5, 8]
result = []
x = [3, -1]
result.append(heapq.heappushpop(x, sequence[0]))

这不应该将 2 压入堆 x 并弹出 -1 吗?我正在推动 2 并弹出。

【问题讨论】:

  • x 不是堆并且顺序不正确,您需要先调用heapq.heapify(x),然后才能期望x 正确地作为堆运行

标签: python sorting heap


【解决方案1】:

发生这种情况是因为您一开始没有使用最小堆。

x 不是最小堆。当您传递给它的列表不是堆时,您不能期望在堆上工作的 heapq 函数给出合理的结果。

所以先做:

heapq.heapify(x)

测试:

import heapq

x = [3, -1]
heapq.heapify(x)
print(heapq.heappushpop(x, 2))  # outputs -1
print(x)  # outputs [2, 3]

【讨论】:

    猜你喜欢
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多