Peeking in a heap in python
What is the official way of peeking in a python heap as created by the heapq libs? Right n开发者_StackOverflow中文版ow I have
def heappeak(heap):
smallest = heappop(heap)
heappush(heap, smallest)
return smallest
which is arguably, not very nice. Can I always assume that heap[0]
is the top of the heap and use that? Or would that assume too much of the underlying implementation?
Yes, you can make this assumption, because it is stated in the documentation:
Heaps are arrays for which
heap[k] <= heap[2*k+1]
andheap[k] <= heap[2*k+2]
for all k, counting elements from zero. For the sake of comparison, non-existing elements are considered to be infinite. The interesting property of a heap is thatheap[0]
is always its smallest element.
(And that's probably the reason there is no peek
function: there is no need for it.)
If you're using Python 2.4 or newer, you can also use heapq.nsmallest().
精彩评论