Python heapq使用詳解及實(shí)例代碼
Python heapq 詳解
Python有一個(gè)內(nèi)置的模塊,heapq標(biāo)準(zhǔn)的封裝了最小堆的算法實(shí)現(xiàn)。下面看兩個(gè)不錯(cuò)的應(yīng)用。
小頂堆(求TopK大)
話(huà)說(shuō)需求是這樣的: 定長(zhǎng)的序列,求出TopK大的數(shù)據(jù)。
import heapq import random class TopkHeap(object): def __init__(self, k): self.k = k self.data = [] def Push(self, elem): if len(self.data) < self.k: heapq.heappush(self.data, elem) else: topk_small = self.data[0] if elem > topk_small: heapq.heapreplace(self.data, elem) def TopK(self): return [x for x in reversed([heapq.heappop(self.data) for x in xrange(len(self.data))])] if __name__ == "__main__": print "Hello" list_rand = random.sample(xrange(1000000), 100) th = TopkHeap(3) for i in list_rand: th.Push(i) print th.TopK() print sorted(list_rand, reverse=True)[0:3]
大頂堆(求BtmK小)
這次的需求變得更加的困難了:給出N長(zhǎng)的序列,求出BtmK小的元素,即使用大頂堆。
算法實(shí)現(xiàn)的核心思路是:將push(e)改為push(-e)、pop(e)改為-pop(e)。
class BtmkHeap(object): def __init__(self, k): self.k = k self.data = [] def Push(self, elem): # Reverse elem to convert to max-heap elem = -elem # Using heap algorighem if len(self.data) < self.k: heapq.heappush(self.data, elem) else: topk_small = self.data[0] if elem > topk_small: heapq.heapreplace(self.data, elem) def BtmK(self): return sorted([-x for x in self.data])
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Python爬蟲(chóng)框架Scrapy常用命令總結(jié)
這篇文章主要介紹了Python爬蟲(chóng)框架Scrapy常用命令,結(jié)合實(shí)例形式總結(jié)分析了Scrapy框架中常見(jiàn)的全局命令與項(xiàng)目命令功能、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2018-07-07Python+OpenCV六種實(shí)時(shí)圖像處理詳細(xì)講解
OpenCV常用的圖像處理為閾值二值化、邊緣檢測(cè)、輪廓檢測(cè)、高斯濾波、色彩轉(zhuǎn)換、調(diào)節(jié)對(duì)比度。本文主要介紹了利用Python和OpenCV對(duì)實(shí)時(shí)圖像進(jìn)行上述六種操作的詳細(xì)講解,感興趣的可以了解一下。2021-11-11Django視圖之ORM數(shù)據(jù)庫(kù)查詢(xún)操作API的實(shí)例
下面小編就為大家?guī)?lái)一篇Django視圖之ORM數(shù)據(jù)庫(kù)查詢(xún)操作API的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10PyQt5?QLineEdit校驗(yàn)器限制輸入實(shí)例代碼
QLineEdit類(lèi)是一個(gè)單行文本控件,可輸入單行字符串,可以設(shè)置回顯模式(Echomode)和掩碼模式,下面這篇文章主要給大家介紹了關(guān)于PyQt5?QLineEdit校驗(yàn)器限制輸入的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05Python中使用matplotlib繪制各類(lèi)圖表示例詳解
這篇文章主要給大家介紹了關(guān)于Python中使用matplotlib繪制各類(lèi)圖表的相關(guān)資料,matplotlib是python的一個(gè)庫(kù),內(nèi)部?jī)?chǔ)存了大量的函數(shù)用于繪制圖像,通常會(huì)與pandas和numpy庫(kù)一起使用,平常我們通常只是用里面的pyplot模塊,需要的朋友可以參考下2023-10-10opencv-python 讀取圖像并轉(zhuǎn)換顏色空間實(shí)例
今天小編就為大家分享一篇opencv-python 讀取圖像并轉(zhuǎn)換顏色空間實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12python爬蟲(chóng)爬取網(wǎng)頁(yè)數(shù)據(jù)并解析數(shù)據(jù)
這篇文章主要介紹了python爬蟲(chóng)如何爬取網(wǎng)頁(yè)數(shù)據(jù)并解析數(shù)據(jù),幫助大家更好的利用爬蟲(chóng)分析網(wǎng)頁(yè),感興趣的朋友可以了解下2020-09-09python基于FTP實(shí)現(xiàn)文件傳輸相關(guān)功能代碼實(shí)例
這篇文章主要介紹了python基于FTP實(shí)現(xiàn)文件傳輸相關(guān)功能代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09