相关疑难解决方法(0)

使用heapq降序

我正在使用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)

为了降序,我尝试了不同的方法,但所有方法都有一些缺点:

  1. 使用负值作为优先级来获得反向排序.我必须使用单独的列表来使数据可重用.如果原始列表很大,那么列表副本的成本很高.

    >>> 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)
  2. 使用具有负值的元组作为优先级,这也浪费了空间.我不想将整数列表存储为元组列表.

    >>> from heapq import heapify, heappop
    >>> …
    Run Code Online (Sandbox Code Playgroud)

python heap python-2.7 python-3.x

7
推荐指数
1
解决办法
2118
查看次数

标签 统计

heap ×1

python ×1

python-2.7 ×1

python-3.x ×1