「heapq」を試してみたところ、私の期待は画面に表示されているものとは異なるという結論に達しました。それがどのように機能し、どこで役立つかを説明してくれる人が必要です。
パラグラフ2.2ソートの下の本Pythonモジュールオブザウィークから、それは書かれています
値を追加および削除するときにソートされたリストを維持する必要がある場合は、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?
したがって、ご覧のとおり、「ヒープ」リストはまったくソートされていません。実際、アイテムを追加および削除すればするほど、リストは雑然とします。プッシュされた値は、説明できない位置を取ります。何が起こっている?