все Python 3heapqпонятие
Куча как приоритетная очередь
применение
Классический паттерн: хранить кортежи (приоритет, данные) в куче для эффективного планирования задач.
Синтаксис
heapq.heappush(pq, (priority, task))
priority, task = heapq.heappop(pq)
Кортежи сравниваются поэлементно, и при равных приоритетах Python дойдёт до самих данных — на словарях или своих объектах это TypeError. Лечится третьим полем-счётчиком: (приоритет, номер, задача); заодно получаете FIFO среди равных приоритетов. И помните, что heapq — min-куча: «первым идёт самый важный» при больших числах приоритета делают через -priority.
Примеры
import heapq
pq = []
heapq.heappush(pq, (2, 'wash dishes'))
heapq.heappush(pq, (1, 'urgent call'))
heapq.heappush(pq, (3, 'read book'))
prio, task = heapq.heappop(pq)
print(task) # → urgent call
prio, task = heapq.heappop(pq)
print(task) # → wash dishes
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности