heapq模塊實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列

heapq模塊是一個(gè)以堆結(jié)構(gòu)解決問題的模塊。對(duì)于需要不斷取一個(gè)列表的最值問題上,可以通過不斷排序來(lái)實(shí)現(xiàn),但是當(dāng)列表過大時(shí)排序就會(huì)很費(fèi)時(shí),為此使用堆結(jié)構(gòu)來(lái)解決這個(gè)問題更加合理。

以下 用heapq 來(lái)實(shí)現(xiàn)一個(gè)優(yōu)先級(jí)隊(duì)列

# coding=utf8
import heapq

class ProrityQueeue(object):
    def __init__(self):
        self._index = 0 #用來(lái)維護(hù)優(yōu)先級(jí)一樣的item的排序
        self._queuue = []
    def push(self,prority,item):
        #  heapq.heappush 以堆結(jié)構(gòu)的方式插入,保證堆頂為最小元素
        # 為了方便以優(yōu)先級(jí)比較,將每一個(gè)子項(xiàng) 設(shè)置為一個(gè)元組,優(yōu)先級(jí)相同時(shí)按照插入的順序排列
        heapq.heappush(self._queuue,(-prority,self._index,item))
        self._index += 1

    def pop(self):
        return heapq.heappop(self._queuue)[2]
if __name__ == '__main__':

    pq = ProrityQueeue()
    pq.push(5,'5')
    pq.push(3,'4')
    pq.push(6,'6')
    pq.push(7,'9')
    pq.push(7,'7')
    pq.push(8,'8')

    for i in range(6):
        print pq.pop()
輸出************************
8
9
7
6
5
4
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,234評(píng)論 25 708
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,661評(píng)論 19 139
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,821評(píng)論 11 349
  • “畢竟西湖六月中,風(fēng)光不與四時(shí)同。” 六月熱氣席卷了整個(gè)城市,在這個(gè)熱情如火的六月,我們公司開展的“安全生產(chǎn)月...
    時(shí)光碎閱讀 454評(píng)論 0 4
  • 可惜沒有如果 如果有吻別, 也算僅有的溫存。 床有余香,沒有了溫度。 蘭州下雪了,卻一眼灰蒙。 就像說(shuō),立春了,跟...
    王兄保重閱讀 181評(píng)論 0 1

友情鏈接更多精彩內(nèi)容