В Python 3 Я использую heapq следующим образом:
import heapq
heap = [3]
heapq.heapify(heap)
heapq.heappush(heap, 5)
# Push more values...
# I can iterate heap like so, but by the end it will be empty:
while (heap):
curr = heapq.heappop(heap)
# Do whatever with curr
Есть ли способ перебрать heapq так, чтобы я получал значения в отсортированном порядке, не изменяя heapq / потерю данных ?
Если нет, как я могу эффективно имитировать желаемое поведение?
Решение, которое я придумал, заключается в создании временной кучи, pu sh к нему, когда я вырываюсь из исходной кучи, и как только я закончу итерацию, установите исходную кучу равной временной куче.
Конечно, это не очень эффективно, и изменяет объект, который исходная куча ссылка.
temp = []
heapq.heapify(temp)
while(heap):
curr = heapq.heappop(heap)
heapq.heappush(temp, curr)
# Do whatever with curr
heap = temp