日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python heap_python topN max heap,使用heapq还是自己实现?

發布時間:2025/4/5 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python heap_python topN max heap,使用heapq还是自己实现? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

heapq的唯一問題是它沒有提供像stdlib中其他所有功能一樣的關鍵功能. (如果你好奇為什么,Raymond Hettinger在

this email中解釋過.他是對的,heapq無法提供與其他排序函數相同的接口 – 但原因不會影響你的用例,其中key只是lambda x: – X.)

通常的解決方法是decorate-heap-undecorate.也就是說,將值的修改版本放入按密鑰排序的堆中.通常,這意味著以下之一:

>存儲密鑰(x)而不是x,然后訪問unkey(值)而不是值(假設密鑰是可逆的).

>存儲(key(x),x)而不是x,然后訪問值[1]. (這可以打破穩定性,但無論如何,heapq都不會保證穩定性.)

>編寫一個實現自定義__le__方法的包裝類,然后存儲Wrapper(x)而不是x并訪問value.value而不是value.

在您的情況下,關鍵功能是可逆的.所以,只需存儲-x和access -value.這和裝飾一樣微不足道.

盡管如此,無論它有多簡單,你都應該寫一個包裝器,否則你會在某些時候搞砸它.例如,您可以編寫一個maxheap來包裝heapq中的minheap,如下所示:

import heapq

def heapify(x):

for i in range(len(x)):

x[i] = -x[i]

heapq.heapify(x)

def heappush(heap, item):

heapq.heappush(heap, -item)

def heappop(heap):

return -heapq.heappop(heap)

……等等您需要的任何其他功能.這可能有點痛苦,但是比從頭開始實施整個事情要少得多.

當你在它時,你可能想要將堆包裝在面向對象的API中,這樣你就可以執行heap.push(x)而不是heapq.heappush(heap,x)等.

import heapq

class MaxHeap(object):

def __init__(self, x):

self.heap = [-e for e in x]

heapq.heapify(self.heap)

def push(self, value):

heapq.heappush(self.heap, -value)

def pop(self):

return -heapq.heappop(self.heap)

如果您快速瀏覽一下ActiveState的配方或PyPI上的模塊,您會發現其他人已經為您完成了大部分工作.

或者,您可以將heapq源(它是純Python)復制并粘貼為maxheapq.py,然后將cmp_lt函數替換為相反的cmp_lt函數. (當然,如果你正在這樣做,那么修改cmp_lt以獲取一個關鍵參數,并且修改所有其他函數以傳遞密鑰時,可能同樣容易,當然也更清楚一些.它將不再普遍適用,因為它不能通常保證只調用一次密鑰.)

如果你真的想要危險地生活(你不應該),你甚至可以將其打包:

import heapq

def cmp_gt(x, y):

return y < x if hasattr(y, '__lt__') else not (x <= y)

heapq.cmp_lt = cmp_gt

但是你不想在實際代碼中這樣做.

總結

以上是生活随笔為你收集整理的python heap_python topN max heap,使用heapq还是自己实现?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人免费性视频 | 韩国伦理片在线播放 | 扒开腿揉捏花蒂h | 精品一区二区三区在线免费观看 | www.youjizz国产 | a级片在线视频 | 成人做爰9片免费视频 | 99精品人妻无码专区在线视频区 | 日韩欧美精品一区二区三区 | 久久另类ts人妖一区二区 | 中文在线永久免费观看 | 精品在线播放视频 | 亚洲国产日韩在线 | 大陆一级片| 双性人做受视频 | 丝瓜av| 亚洲男人皇宫 | 精品国产乱码久久久久久影片 | 欧美日韩成人在线播放 | 成人性生活毛片 | 色先锋资源网 | 丰满人妻一区二区三区四区 | 奶水喷溅虐奶乳奴h文 | 99re在线精品视频 | 亚洲拍拍视频 | 成人免费在线播放 | 国产麻豆精品一区二区 | 国产视频导航 | 亚洲人成电影一区二区在线 | 青青在线免费观看 | 欧美成人视 | 美女扒开腿让人桶爽 | 中文字幕不卡在线观看 | 友田真希一区二区 | 日韩脚交footjobhd | 91色站 | 亚洲欧洲天堂 | 亚洲欧美影院 | 国产国产精品 | 色姑娘天天操 | 神马三级我不卡 | 国产精品三级电影 | 欧美亚洲专区 | 中文字幕av影视 | 欧美日韩中文字幕在线视频 | 成人人伦一区二区三区 | 婷婷五月精品中文字幕 | 自拍第一区 | 日韩欧美福利视频 | 国内成人av | 男女性杂交内射妇女bbwxz | 国产av精国产传媒 | yellow免费在线观看 | 我把护士日出水了视频90分钟 | 美女校花脱精光 | 爱情岛论坛亚洲品质自拍视频 | 青青视频免费观看 | 岛国片免费在线观看 | 少妇久久久久久被弄到高潮 | 熟妇高潮一区二区高潮 | 五月丁香综合激情六月久久 | 熟女俱乐部一区二区视频在线 | 日韩欧美精品久久 | 亚洲第一激情 | 黄色三级片毛片 | 97视频在线观看免费高清完整版在线观看 | 欧美日韩综合视频 | 天堂资源站 | 亚洲人成777 | a点w片| 久久久线视频 10 | 91麻豆视频在线观看 | 国产手机视频在线 | 91小仙女jk白丝袜呻吟 | 99热这里有精品 | 高潮流白浆在线观看 | 永久在线视频 | 国产成年网站 | 美女主播福利视频 | 婷婷亚洲视频 | 日本www高清 | 99热免费在线观看 | 99视屏 | 色www亚洲国产张柏芝 | 美妇av| 久久福利国产 | 中文字幕第一页在线播放 | 永久免费在线观看视频 | 欧美狠狠干 | 日本暧暧视频 | 欧美亚洲影院 | 国产一区综合 | 国产精品久久AV无码 | 国产精品久久久久久久久久免费看 | 亚洲精品视频在线看 | 日韩中文免费 | 18禁一区二区三区 | 男性裸体全身精光gay | 九九热视频在线播放 |