import heapq heapq.heapreplace(heap, item)
heap
- список с кучей,item
- добавляемый элемент.Функция heapreplace()
модуля heapq
сначала удаляет и возвращает наименьший элемент из кучи heap
, а потом добавляет новый элемент item
. Размер кучи heap
не меняется. Если куча пуста, поднимается исключение IndexError
.
Эта одношаговая операция более эффективна, чем вызов heapq.heappop()
, за которой следует heapq.heappush()
и может быть более подходящей при использовании кучи фиксированного размера. Комбинация pop/push всегда возвращает элемент из кучи и заменяет его на item
.
Возвращаемое значение может быть больше, чем добавленный элемент. Если это нежелательно, рассмотрите возможность использования функции heapq.heappushpop()
. Его комбинация push/pop возвращает меньшее из двух значений, оставляя большее значение в куче.
>>> import heapq >>> h = [(3, 'three'), (1, 'one'), (7, 'seven'), (5, 'five'), (9, 'nine')] >>> heapq.heapify(h) >>> heapq.heapreplace(h, (2, 'two')) # (1, 'one') >>> heapq.heapreplace(h, (0, 'zero')) # (2, 'two') >>> h [(0, 'zero'), (3, 'three'), (7, 'seven'), (5, 'five'), (9, 'nine')]