47

由 heapq 库创建的在 python 堆中窥视的官方方法是什么?现在我有

def heappeak(heap):
  smallest = heappop(heap)
  heappush(heap, smallest)
  return smallest

可以说,这不是很好。我可以总是假设这heap[0]是堆的顶部并使用它吗?还是会假设太多的底层实现?

4

2 回答 2

66

是的,您可以做出这个假设,因为它在文档中说明:

堆是所有kheap[k] <= heap[2*k+1]的数组,从零开始计数元素。为了比较,不存在的元素被认为是无限的。堆的有趣属性是它 始终是它的最小元素。heap[k] <= heap[2*k+2]heap[0]

(这可能是没有peek功能的原因:不需要它。)

于 2009-11-17T19:00:17.177 回答
9

如果您使用的是 Python 2.4 或更新版本,您还可以使用 heapq.nsmallest()。

于 2011-05-03T14:07:12.113 回答