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

您的位置:首頁技術文章
文章詳情頁

python 如何在list中找Topk的數值和索引

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

對于一個python list 或者numpy數組,我需要找到這個list中最大的K個數及其對應的下標。

解決方式:

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

2. 使用heapq庫,可以直接獲取最大值的下標和數值。

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

如果要取最小的數,使用 nsmallest即可

補充:Python 利用中間值求TopK 算法

算法思想

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

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

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

如果用排序那就沒必要引入topK 了,當數據強大的時候選取TopK 可以省略很多排序的計算,至于有多優化自己去思考下,就比如排列組合的C,A的區別,一個是抽取,一個是抽取并排列…

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

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

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

那么我們當比較

【比中間值大的列表】的個數 == k

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

重點就是找出這個中間值如何找出中間值

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

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

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

·····繼續在【比中間值小的列表】找

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

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

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

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

結合代碼和注釋看

如果要找最小值,只需要改一下就ok ,還可以設置一個布爾值的輸入,來做前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個數的情況, if k > theBigLen:return topKNum(theSmall,k-theBigLen-1) # 大值的列表中大于K個數的情況 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))

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 北京银联移动POS机办理_收银POS机_智能pos机_刷卡机_收银系统_个人POS机-谷骐科技【官网】 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 圆形振动筛_圆筛_旋振筛_三次元振动筛-河南新乡德诚生产厂家 | 耐酸碱胶管_耐腐蚀软管总成_化学品输送软管_漯河利通液压科技耐油耐磨喷砂软管|耐腐蚀化学软管 | 安徽免检低氮锅炉_合肥燃油锅炉_安徽蒸汽发生器_合肥燃气锅炉-合肥扬诺锅炉有限公司 | 【365公司转让网】公司求购|转让|资质买卖_股权转让交易平台 | 定制/定做冲锋衣厂家/公司-订做/订制冲锋衣价格/费用-北京圣达信 | 北京银联移动POS机办理_收银POS机_智能pos机_刷卡机_收银系统_个人POS机-谷骐科技【官网】 | 济南律师,济南法律咨询,山东法律顾问-山东沃德律师事务所 | 高铝矾土熟料_细粉_骨料_消失模_铸造用铝矾土_铝酸钙粉—嵩峰厂家 | 3D全息投影_地面互动投影_360度立体投影_水幕灯光秀 | 广东银虎 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 南京泽朗生物科技有限公司-液体饮料代加工_果汁饮料代加工_固体饮料代加工 | 济南宣传册设计-画册设计_济南莫都品牌设计公司 | 太原装修公司_山西整装家装设计_太原室内装潢软装_肖邦家居 | 警方提醒:赣州约炮论坛真的安全吗?2025年新手必看的网络交友防坑指南 | led冷热冲击试验箱_LED高低温冲击试验箱_老化试验箱-爱佩百科 | 成都LED显示屏丨室内户外全彩led屏厂家方案报价_四川诺显科技 | 盘式曝气器-微孔曝气器-管式曝气器-曝气盘-斜管填料 | 郑州市前程水处理有限公司 | 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 瑞典Blueair空气净化器租赁服务中心-专注新装修办公室除醛去异味服务! | 进口消泡剂-道康宁消泡剂-陶氏消泡剂-大洋消泡剂 | 外观设计_设备外观设计_外观设计公司_产品外观设计_机械设备外观设计_东莞工业设计公司-意品深蓝 | 首页|专注深圳注册公司,代理记账报税,注册商标代理,工商变更,企业400电话等企业一站式服务-慧用心 | 自动售货机_无人售货机_专业的自动售货机运营商_免费投放售货机-广州富宏主官网 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | 渣油泵,KCB齿轮泵,不锈钢齿轮泵,重油泵,煤焦油泵,泊头市泰邦泵阀制造有限公司 | PCB接线端子_栅板式端子_线路板连接器_端子排生产厂家-置恒电气 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 假肢-假肢价格-假肢厂家-河南假肢-郑州市力康假肢矫形器有限公司 | 航空障碍灯_高中低光强航空障碍灯_民航许可认证航空警示灯厂家-东莞市天翔航天科技有限公司 | 西安微信朋友圈广告投放_微信朋友圈推广_西安度娘网络科技有限公司 | 深圳市宏康仪器科技有限公司-模拟高空低压试验箱-高温防爆试验箱-温控短路试验箱【官网】 | 北钻固控设备|石油钻采设备-石油固控设备厂家 | 苏州伊诺尔拆除公司_专业酒店厂房拆除_商场学校拆除_办公楼房屋拆除_家工装拆除拆旧 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 辐射仪|辐射检测仪|辐射巡测仪|个人剂量报警仪|表面污染检测仪|辐射报警仪|辐射防护网 | 炭黑吸油计_测试仪,单颗粒子硬度仪_ASTM标准炭黑自销-上海贺纳斯仪器仪表有限公司(HITEC中国办事处) | 烟台游艇培训,威海游艇培训-烟台市邮轮游艇行业协会 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 动物麻醉机-数显脑立体定位仪-北京易则佳科技有限公司 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 合肥花魁情感婚姻咨询中心_挽回爱情_修复婚姻_恋爱指南 |