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]
我觉得我一定是误解了 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]