Python HeapPushPop 没有弹出最小元素

Python HeapPushPop not popping minimum element

我觉得我一定是误解了 heappushpop 因为我不明白为什么会这样。

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

这不是应该把2压入堆x然后pop -1吗?我正在推动和弹出 2。

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

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]