Python Glossary English

все 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Сообщить о неточности