我正在使用Python的heapq模块以升序和降序获取数据.
对于上升的,我是用最小堆和它运作良好如下:
>>> from heapq import heapify, heappop
>>> heap = [9, 3, 1, 5, 6, 2, 7]
>>> heapify(heap)
>>> heappop(heap)
1
>>> heappop(heap)
2
>>> heappop(heap)
3
Run Code Online (Sandbox Code Playgroud)
为了降序,我尝试了不同的方法,但所有方法都有一些缺点:
使用负值作为优先级来获得反向排序.我必须使用单独的列表来使数据可重用.如果原始列表很大,那么列表副本的成本很高.
>>> from heapq import heapify, heappop
>>> heap = [9, 3, 1, 5, 6, 2, 7]
>>> heap_neg = [-x for x in heap]
>>> heapify(heap_neg)
>>> -heappop(heap_neg)
9
>>> -heappop(heap_neg)
7
>>> -heappop(heap_neg)
6
Run Code Online (Sandbox Code Playgroud)使用具有负值的元组作为优先级,这也浪费了空间.我不想将整数列表存储为元组列表.
>>> from heapq import heapify, heappop
>>> …Run Code Online (Sandbox Code Playgroud)