Я попробовал "heapq" и пришел к выводу, что мои ожидания отличаются от того, что я вижу на экране. Мне нужно, чтобы кто-то объяснил, как это работает и где это может быть полезно.
Из книги Python Module недели в разделе 2.2 Сортировка написано
Если вам нужно сохранить отсортированный список при добавлении и удалении значений, проверьте heapq. Используя функции в heapq для добавления или удаления элементов из списка, вы можете сохранить порядок сортировки списка с помощью низкие накладные расходы.
Вот что я делаю и получаю.
import heapq
heap = []
for i in range(10):
heap.append(i)
heap
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
heapq.heapify(heap)
heapq.heappush(heap, 10)
heap
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
heapq.heappop(heap)
0
heap
[1, 3, 2, 7, 4, 5, 6, 10, 8, 9] <<< Why the list does not remain sorted?
heapq.heappushpop(heap, 11)
1
heap
[2, 3, 5, 7, 4, 11, 6, 10, 8, 9] <<< Why is 11 put between 4 and 6?
Итак, поскольку вы видите, что список "кучи" вообще не отсортирован, на самом деле, чем больше вы добавляете и удаляете предметы, тем они становятся более загроможденными. Выталкиваемые значения берут необъяснимые позиции. Что происходит?