h = []
heapq.heappush(h,(10, 1200))
heapq.heappush(h,(20, 31))
heapq.heappush(h,(5, 1))

我想保持固定的堆大小为3,所以当我接下来有heapq.heappush(h,(3,15))时,值20的键将被删除,而值3,5和10则被保留。任何想法如何?

最佳答案

heapq中没有内置的功能可以检查大小,因此您必须自己执行以下操作:

if len(h) < capacity:
    heapq.heappush(h, thing)
else:
    # Equivalent to a push, then a pop, but faster
    spilled_value = heapq.heappushpop(h, thing)
    do_whatever_with(spilled_value)

另外,请注意,heapq实现的是最小堆,而不是最大堆。您可能需要通过取消优先顺序来颠倒优先顺序。

关于python - 保持固定大小的堆-python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30443150/

10-12 21:11