电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

python 如何在list中找Topk的數(shù)值和索引

瀏覽:4日期:2022-06-19 09:19:29
需求:

對于一個python list 或者numpy數(shù)組,我需要找到這個list中最大的K個數(shù)及其對應(yīng)的下標(biāo)。

解決方式:

1. 可以構(gòu)造字典通過排序解決,不過代碼量較多。

2. 使用heapq庫,可以直接獲取最大值的下標(biāo)和數(shù)值。

import heapqa = [4,2,6,1,9,9] # 獲取下標(biāo), 輸出為[4, 5, 2]heapq.nlargest(3, range(len(a)), a.__getitem__) # 獲取數(shù)值, 輸出為[9, 9, 6]heapq.nlargest(3,a)

如果要取最小的數(shù),使用 nsmallest即可

補(bǔ)充:Python 利用中間值求TopK 算法

算法思想

首先我們要思考,我要做什么?解決什么問題?

TopK問題,找出一組數(shù)據(jù)中的前K個最大值或者最小值,這個數(shù)據(jù)是否重復(fù)?要做去重處理?

ok 我們明確我們做什么了 ,那介紹的python處理的topK 算法過程是怎么樣的呢?

如果用排序那就沒必要引入topK 了,當(dāng)數(shù)據(jù)強(qiáng)大的時候選取TopK 可以省略很多排序的計算,至于有多優(yōu)化自己去思考下,就比如排列組合的C,A的區(qū)別,一個是抽取,一個是抽取并排列…

以下以找出TopK 的最大值為例,最小值的可以自己修改一下下就可以

介紹的算法思想是利用中間值,將數(shù)列分為三部分 ,

【比中間值大的列表】,中間值,【比中間值小的列表】

那么我們當(dāng)比較

【比中間值大的列表】的個數(shù) == k

的時候就可以得出前K個最大值了,因此

重點(diǎn)就是找出這個中間值如何找出中間值

以列表的第一個數(shù)開始為中間值,拆分為三部分

if 【比中間值大的列表】的個數(shù) == k:return 中間值 #程序出口,結(jié)束。

if 【比中間值大的列表】的個數(shù) < k :

·····繼續(xù)在【比中間值小的列表】找

·····K - 【比中間值大的列表】的個數(shù) -1 個數(shù)

(為什么要減一,1是前一次的中間值,分的三部分,前部分后部分都沒有包含中間值,因此…)

if 【比中間值大的列表】的個數(shù) > k :

…也就是說比中間值大的列表比K還大,那就在這個列表中繼續(xù)找就行

結(jié)合代碼和注釋看

如果要找最小值,只需要改一下就ok ,還可以設(shè)置一個布爾值的輸入,來做前K個最大值最小值

#2019 11 04#author 半斤地瓜燒#TopK 算法,找出序列中前K個最大值的#輸入一個seq# 輸出以seq[0]為中間值 劃分的三個部分,中間值,比這個值大的seq ,比這個值小的seq,# 即splitNum,theBig,theSmalldef Split_Seq(seq): splitNum = seq[0] seq = seq[1:]#兩個部分都不包含中間值,因此切片去除seq[0] theBig = [x for x in seq if x >= splitNum] theSmall = [x for x in seq if x < splitNum] return splitNum,theBig,theSmall#找出中間值def topKNum(seq,k): splitNum, theBig, theSmall = Split_Seq(seq) theBigLen = len(theBig)if k == theBigLen:return splitNum#出口,返回這個中間值, # 為什么不直接返回thebig?因為存在遞歸的原因thebig 不是在初始的seq找出來的 #需要重新Split,即可,讀者自己思考 # 大值的列表中還未夠K個數(shù)的情況, if k > theBigLen:return topKNum(theSmall,k-theBigLen-1) # 大值的列表中大于K個數(shù)的情況 return topKNum(theBig,k)#由中間值找出TopK個值,<list>def getTopK(seq,k):return [i for i in seq if i > topKNum(seq, k)]if __name__ == ’__main__’: alist = [7, 3, 5, 1,885,234,2211,222,22, 2, 11, 2, 115] print('===為了驗證,引入排序觀看===', sorted(alist,reverse= True)) print(getTopK(alist, 3))

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 切铝机-数控切割机-型材切割机-铝型材切割机-【昆山邓氏精密机械有限公司】 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 安徽免检低氮锅炉_合肥燃油锅炉_安徽蒸汽发生器_合肥燃气锅炉-合肥扬诺锅炉有限公司 | 洗地机-全自动/手推式洗地机-扫地车厂家_扬子清洁设备 | 粉末包装机-给袋式包装机-全自动包装机-颗粒-液体-食品-酱腌菜包装机生产线【润立机械】 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 上海风淋室_上海风淋室厂家_上海风淋室价格_上海伯淋 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 5nd音乐网|最新流行歌曲|MP3歌曲免费下载|好听的歌|音乐下载 免费听mp3音乐 | 高铝砖-高铝耐火球-高铝耐火砖生产厂家-价格【荣盛耐材】 | 防爆型气象站_农业气象站_校园气象站_农业四情监测系统「山东万象环境科技有限公司」 | 合肥网带炉_安徽箱式炉_钟罩炉-合肥品炙装备科技有限公司 | 河南彩印编织袋,郑州饲料编织袋定制,肥料编织袋加工厂-盛军塑业 河南凯邦机械制造有限公司 | 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | 深圳活动策划公司|庆典策划|专业公关活动策划|深圳艺典文化传媒 重庆中专|职高|技校招生-重庆中专招生网 | 汽车润滑油厂家-机油/润滑油代理-高性能机油-领驰慧润滑科技(河北)有限公司 | 螺杆真空泵_耐腐蚀螺杆真空泵_水环真空泵_真空机组_烟台真空泵-烟台斯凯威真空 | Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 | 步进_伺服_行星减速机,微型直流电机,大功率直流电机-淄博冠意传动机械 | 水篦子|雨篦子|镀锌格栅雨水篦子|不锈钢排水篦子|地下车库水箅子—安平县云航丝网制品厂 | 西门子伺服电机维修,西门子电源模块维修,西门子驱动模块维修-上海渠利 | 瓶盖扭矩仪(扭力值检测)-百科| 厂房出售_厂房仓库出租_写字楼招租_土地出售-中苣招商网-中苣招商网 | 拖链电缆_柔性电缆_伺服电缆_坦克链电缆-深圳市顺电工业电缆有限公司 | 作文导航网_作文之家_满分作文_优秀作文_作文大全_作文素材_最新作文分享发布平台 | 冷水机-工业冷水机-冷水机组-欧科隆品牌保障 | 胶辊硫化罐_胶鞋硫化罐_硫化罐厂家-山东鑫泰鑫智能装备有限公司 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 氢氧化钙设备_厂家-淄博工贸有限公司 | 橡胶膜片,夹布膜片,橡胶隔膜密封,泵阀设备密封膜片-衡水汉丰橡塑科技公司网站 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 涂层测厚仪_漆膜仪_光学透过率仪_十大创新厂家-果欧电子科技公司 | 铆钉机|旋铆机|东莞旋铆机厂家|鸿佰专业生产气压/油压/自动铆钉机 | 企业微信scrm管理系统_客户关系管理平台_私域流量运营工具_CRM、ERP、OA软件-腾辉网络 | 天津暖气片厂家_钢制散热器_天津铜铝复合暖气片_维尼罗散热器 | 防爆电机_防爆电机型号_河南省南洋防爆电机有限公司 | 扬尘在线监测系统_工地噪声扬尘检测仪_扬尘监测系统_贝塔射线扬尘监测设备「风途物联网科技」 | 西门子气候补偿器,锅炉气候补偿器-陕西沃信机电工程有限公司 | 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格| 全温度恒温培养摇床-大容量-立式-远红外二氧化碳培养箱|南荣百科 |