priority libreria heapq empty python heap peek

libreria - Echando un vistazo en un montón en python



max heap python (2)

¿Cuál es la forma oficial de echar un vistazo en un montón de python creado por las librerías heapq? Ahora tengo

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

lo que es discutible, no muy agradable. ¿Puedo asumir siempre que el heap[0] es la parte superior del montón y usar eso? ¿O eso supondría demasiado de la implementación subyacente?


Sí, puede hacer esta suposición, porque se encuentra en la documentation :

Los montones son matrices para las cuales el heap[k] <= heap[2*k+1] y el heap[k] <= heap[2*k+2] para todos los k , contando los elementos desde cero. En aras de la comparación, los elementos no existentes se consideran infinitos. La propiedad interesante de un montón es que el heap[0] es siempre su elemento más pequeño.

(Y esa es probablemente la razón por la que no hay una función de peek : no hay necesidad de hacerlo).


Si está utilizando Python 2.4 o más reciente, también puede usar heapq.nsmallest ().