實現乙個優先順序佇列,每次pop的元素要是優先順序高的元素,由於heapq.heapify(list)預設構建一程式設計客棧個小頂堆,因此要將priority變為相反數再push,**如下:
import heapq
class priorityqueue(object):
"""實現乙個優先順序佇列,每次pop優先順序最高的元素"""
def __init__(self):
self._queue =
self._index = 0
def push(self,item,priority):
heapq.heappush(self._queue,(-priority,self._index,item))#將priority和index結合使用,在priority相同的時候比較index,pop先進入佇列的元素
self._index + 1
def pop(self):
return heapq.heappop(self._queue)[-1]
if __name__ == '__main__':
pqueue = priorityqueue()
pqueue.push('d',4)
pqueue.pu程式設計客棧sh('f',3)
pqueue.push('a',6)
pqueue.push('s',2)
print(pqueue.pop())
print(pqueue.pop())
print(pqueue.pop())
本文標題: python利用heapq實現乙個優先順序佇列的方法
本文位址:
Python中的heapq模組
heapq模組提供基於堆的優先排序演算法,內建模組位於.anaconda3 lib heapq.py。堆的邏輯結構就是完全二叉樹,並且二叉樹中父節點的值小於等於該節點的所有子節點的值。這種實現可以使用 heap k heap 2k 1 並且 heap k heap 2k 2 其中 k 為索引,從 0...
python 堆操作 heapq庫
這個模組 build in 實現了乙個堆的資料結構,完美的解決了top k問題,以後解決top k問題的時候,直接把這個模組拿來用就可以了 注意,預設的heap是乙個小頂堆!heapq模組提供了如下幾個函式 heapq.heapify x 將列表x進行堆調整,預設的是小頂堆 heapq.merge ...
Python中堆模組heapq
對於排序演算法有很多種,其中包括常見的 氣泡排序,選擇排序,插入排序,希爾排序,快速排序,歸併排序,堆排序 這裡主要講一下堆排序,可以採用自己的方式實現,也可以採用python內建模組heapq實現,現在分別從這兩種方法實現一下.1 自己實現 import math from collections...