如何正式地查看由heapq库创建的Python堆的内容?目前我有以下代码:
def heappeak(heap):
smallest = heappop(heap)
heappush(heap, smallest)
return smallest
这可能不是一个很好的方式,但我可以始终假设heap[0]
是堆顶并使用它吗?或者那样做会过度假设底层实现?
是的,你可以这样假设,因为在文档中已经说明了:
堆是指满足条件
heap[k] <= heap[2*k+1]
和heap[k] <= heap[2*k+2]
的数组,其中 k 从零开始计数。为了便于比较,认为不存在的元素是无穷大的。堆的一个有趣的特性是heap[0]
总是它的最小元素。
(这可能是为什么没有 peek
函数的原因:根本没有必要。)
nsmallest()
的复杂度。在3.8中,我看到例如“在保持堆中k个最极端值的同时对数据进行单次遍历。”... 如果您只能使用 heap[0]
,则对于n=1来说并不理想。 - P Marecki