我尝试了“heapq”,得出的结论是我的期望与我在屏幕上看到的不同。我需要有人解释它是如何工作的以及它在哪里有用。
来自本周 Python Module of the Week的第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?
因此,正如您看到的“堆”列表根本没有排序,事实上,您添加和删除的项目越多,它变得越混乱。推送的值处于无法解释的位置。到底是怎么回事?