在python中偷看一堆

Tho*_*mas 29 python heap peek

在heapq堆中创建的python堆中偷看的官方方式是什么?现在我有

def heappeak(heap):
  smallest = heappop(heap)
  heappush(heap, smallest)
  return smallest
Run Code Online (Sandbox Code Playgroud)

可以说,不是很好.我可以一直认为这heap[0]是堆的顶部并使用它吗?或者这会假设太多的底层实现?

Ste*_*202 42

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

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

(这可能是没有peek功能的原因:没有必要.)

  • @BeeGee 这不是真的,也不需要是真的。您可以自己尝试一个简单的例子。 (8认同)
  • 虽然拼写正确但可能*对你有帮助,但我还是好奇地观察到这个词在文档中没有出现过. (4认同)

Dan*_*ree 5

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

  • 请务必检查您正在使用的“nsmallest()”的复杂性。在 3.8 中,我看到“对数据进行单次传递,同时将 k 个最极端的值保留在堆中”。...对于 n=1 来说并不理想,如果你可以只使用“heap[0]”。 (3认同)
  • 在这种情况下,“ n”是否为1? (2认同)