在Python中窥视堆栈

64 投票
2 回答
56423 浏览
提问于 2025-04-15 16:07

在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 函数的原因:根本不需要它。)

撰写回答