在Python中窥视堆栈
在Python中,使用heapq库创建的堆(heap)有什么官方的方法可以查看堆的内容呢?现在我有了下面的代码:
def heappeak(heap):
smallest = heappop(heap)
heappush(heap, smallest)
return smallest
这段代码可能不是很好。请问我能否总是认为heap[0]
是堆的顶部,并直接使用它?这样做会不会对底层的实现假设得太多呢?
2 个回答
9
如果你使用的是Python 2.4或更新的版本,你还可以使用heapq.nsmallest()这个功能。
95
是的,你可以这样理解,因为在文档中有说明:
堆是一种数组,对于每个元素
heap[k] <= heap[2*k+1]
和heap[k] <= heap[2*k+2]
都成立,k 从零开始计算。为了方便比较,不存在的元素被认为是无限大的。堆的一个有趣的特点是heap[0]
总是最小的元素。
(这可能就是为什么没有 peek
函数的原因:根本不需要它。)