日韩性视频-久久久蜜桃-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还是自己实现?的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产 日韩 欧美 精品 | 黄色成年人网站 | 久久精品国产网红主播 | 国产精品久久久久aaaa | 免费人妻精品一区二区三区 | 青青操原 | 婷婷国产一区 | 久热综合 | 日批视频在线看 | 国产精品2区 | 能免费看av的网站 | 青娱乐在线播放 | 色诱av手机版 | 99视频在线免费观看 | 91在线中文字幕 | 人妻久久久一区二区三区 | 成人在线小视频 | 国产xxxx性hd极品 | 少妇毛片一区二区三区 | 中国黄色免费 | 极品美女扒开粉嫩小泬 | 久久人妻精品白浆国产 | 亚洲人成无码www久久久 | 四虎影视最新网址 | 欧洲在线视频 | 国产一级片麻豆 | 免费成人蒂法网站 | 秋霞黄色网 | 亚洲国产成人精品无码区99 | 中文字幕 日本 | 国产污污网站 | 99久久精品国产成人一区二区 | 欧美黄色小视频 | 国模丫头1000人体 | 蜜桃一区二区 | 欧美一级日韩一级 | 日本大尺度激情做爰hd | 亚日韩在线 | 欧美性生活一级 | 熟女熟妇伦久久影院毛片一区二区 | 国产精品久久久久永久免费看 | 久久黄色片视频 | 青青草伊人久久 | 一久久久| 欧美天天色| 国产一卡二卡三卡 | 国产suv精品一区二区69 | 少妇高潮淫片免费观看 | 国产美女菊爆在线播放APP | 国产一级二级在线 | 91网站在线看 | 熟妇人妻精品一区二区三区视频 | 99r热| 视频在线免费观看 | 99精品在线播放 | 中文字幕少妇在线三级hd | 日韩av手机在线播放 | 亚洲裸体网站 | 人人干超碰 | 欧美绿帽交换xxx | 青青草91| 久久av影院 | 男女午夜激情 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 国产熟妇与子伦hd | 日韩精品久久久久久久的张开腿让 | h视频在线免费观看 | 国产精品亚洲AV色欲三区不卡 | 蜜臀久久99精品久久久久久宅男 | 精品视频日韩 | 瑟瑟在线视频 | ts人妖另类精品视频系列 | 天天操操操操操 | 99久久99久久精品国产片果冰 | 亚洲欧美日韩综合 | 中文字幕一区二区三区乱码不卡 | 亚洲国产无线乱码在线观看 | 开心激情亚洲 | 亚洲第一成肉网 | 亚洲自拍偷拍视频 | 91视频免费看片 | 午夜视频在线免费 | 美女久久久 | 日韩一区二区三区四区 | 久草福利在线视频 | 曰曰操 | 日本在线视频播放 | 欧美va在线观看 | 黄色自拍网站 | 国产三级国产精品国产专区50 | 九九亚洲视频 | 一区二区精品久久 | 一本av在线 | 蜜臀一区二区三区精品免费视频 | 黄色av免费网站 | 福利视频二区 | 玉女心经是什么意思 | 九一精品一区 | 天天色天天色 |