转载自:https://blog.csdn.net/together_cz/article/details/84944927

今天遇到一个小问题就是要获取列表中最大/最小的前n个数值的位置索引,实现很简单,可仔细一想实现的方法还是很有意思的,下面是具体的实现:

#!usr/bin/env python
#encoding:utf-8
from __future__ import division'''
__Author__:沂水寒城
功能:获取列表中最大/最小的前n个数值的位置索引
'''import copy
import heapqdef getListMaxNumIndex(num_list,topk=3):'''获取列表中最大的前n个数值的位置索引'''max_num_index=map(num_list.index, heapq.nlargest(topk,num_list))min_num_index=map(num_list.index, heapq.nsmallest(topk,num_list))print 'max_num_index:',max_num_indexprint 'min_num_index:',min_num_indexdef getListMaxNumIndex2(num_list,topk=3):'''获取列表中最大的前n个数值的位置索引'''tmp_list=copy.deepcopy(num_list)tmp_list.sort()max_num_index=[num_list.index(one) for one in tmp_list[::-1][:topk]]min_num_index=[num_list.index(one) for one in tmp_list[:topk]]print 'max_num_index:',max_num_indexprint 'min_num_index:',min_num_indexdef getListMaxNumIndex3(num_list,topk=3):'''获取列表中最大的前n个数值的位置索引'''num_dict={}for i in range(len(num_list)):num_dict[i]=num_list[i]res_list=sorted(num_dict.items(),key=lambda e:e[1])max_num_index=[one[0] for one in res_list[::-1][:topk]]min_num_index=[one[0] for one in res_list[:topk]]print 'max_num_index:',max_num_indexprint 'min_num_index:',min_num_indexdef getListMaxNumIndex4(num_list,topk=3):'''获取列表中最大的前n个数值的位置索引'''tmp_list=copy.deepcopy(num_list)max_num=sum([abs(O) for O in num_list])min_num=-1*max_nummax_num_index,min_num_index=[],[]for i in range(topk):one_max_index=num_list.index(max(num_list))max_num_index.append(one_max_index)num_list[one_max_index]=min_numfor i in range(topk):one_min_index=tmp_list.index(min(tmp_list))min_num_index.append(one_min_index)tmp_list[one_min_index]=max_numprint 'max_num_index:',max_num_indexprint 'min_num_index:',min_num_indexif __name__=='__main__':num_list=[13,4,-8,3,1,43,55,2,7,11,78]getListMaxNumIndex(num_list,topk=3)getListMaxNumIndex2(num_list,topk=3)getListMaxNumIndex3(num_list,topk=3)getListMaxNumIndex4(num_list,topk=3)

结果如下;

max_num_index: [10, 6, 5]
min_num_index: [2, 4, 7]
max_num_index: [10, 6, 5]
min_num_index: [2, 4, 7]
max_num_index: [10, 6, 5]
min_num_index: [2, 4, 7]
max_num_index: [10, 6, 5]
min_num_index: [2, 4, 7]

其中,第一种最简单耗时也最短,是通过heapq库间接实现的,后面三种方法的“笨重程度”依次增加,不过都实现了同样的功能。

python四中方法获取列表中最大/最小的前n个数值的位置索引相关推荐

  1. Python: 使用max()获取列表中重复出现次数最多的元素

    import numpy as npa = [1,2,3,4,5,6,7,] print(max(a,key=a.count)) 其中 a 必须使 列表. 如果a 是nparray就会出错 例如如下是 ...

  2. Python实例 -- 如何快速获取列表中最大的三个元素

    如何快速获取列表中最大的三个元素 最近在做实验,期间需要在一个列表中获取最大的三个元素,自己写的方法复杂度太高,放上大牛的方法,复杂度很低.多看几遍,才能体会到大概的精髓.这道题也是Python的面试 ...

  3. 获取列表中的最大的N项和最小的N项

    获取列表中的最大的N项和最小的N项 #!/sur/bin/env python # -*- coding:utf-8 -*- # author:zengsf #time:2018/10/31impor ...

  4. python权重是什么意思_在python带权重的列表中随机取值的方法

    1 random.choice python random模块的choice方法随机选择某个元素 foo = ['a', 'b', 'c', 'd', 'e'] from random import ...

  5. java list 截取部分数据_Java List.subList()方法:获取列表中指定范围的子列表

    集合类中的 List.subList() 方法用于获取列表中指定范围的子列表,该列表支持原列表所支持的所有可选操作.返回列表中指定范围的子列表. 语法: subList(int fromIndex,i ...

  6. 【python】获取列表中最长连续数字

    最近开发遇到一个功能需求,目的是要获取一个AI分析结果中最长连续帧,比如一个视频中连续3帧有人,那么我认为这个视频就是有人,我就要判断这个视频帧列表中是否有连续的三帧有人.本质就是获取列表中的最长连续 ...

  7. Python入门--列表的查询操作--获取列表知道那个元素的索引、获取列表中的单个元素、获取列表中的多个元素

    #列表的查询操作 #获取列表中指定元素的索引 #index()-->如果列表中存在N个相同的元素,只返回相同元素中的第一个索引 # -->如果查询的元素在列表中不存在,则会抛出Valuee ...

  8. python获取列表中最大N个数及其索引

    python获取列表中最大N个数及其索引 写作目的 步骤 结果展示 写作目的 主要是看到别人的基本都是利用hepap排序,感觉还挺麻烦的 步骤 import pandas a=[5,2,6,7,9] ...

  9. python 获取列表中多个元素-切片操作

    # -*-coding:utf-8 -*- # @Time : 20:48 # @Author: 黄荣津 # @File : 4.获取列表中多个元素-切片操作.py # @Software: PyCh ...

最新文章

  1. 牛客多校第六场-H-Pair
  2. python 字典的值是列表_python实现求和python如何通过列表中字典的值对列表进行排序...
  3. 前端:常用的meta标签总结
  4. Java对象内存图一
  5. centos如何安装数据库mysql
  6. mysql5.7 no password_MySQL5.7.20报错Access denied for user 'root'@'localhost' (using password: NO)
  7. 【Hive】命令行提示符中显示当前所在数据库
  8. ZOJ3067_Nim
  9. css radio 垂直居中显示,CSS表单元素垂直居中完美解决方案
  10. linux mint 19安装 kvm 软件包
  11. Vue3中文文档 - vuejs
  12. 再传喜讯,鸿雁中标杭州地铁3号线配电工程
  13. 2021年韩国经济发展研究报告
  14. TcpClient 示例程序 C 语言
  15. Tomcat之——宕机自动重启和每日定时启动tomcat
  16. 【图片新闻】五角大楼的国防创新部DIU正在规划建设一个未来机器人空间站
  17. matlab用jc法计算可靠度,用MATLAB实现JC法计算结构可靠度程序
  18. 马未都:人生三重境界
  19. 李开复台大演讲:人工智能来了,别怕
  20. NVCC CUDA编译流程

热门文章

  1. opensplice dds v6.3.2_给你看个宝贝,近乎完美的DDS正弦波信号音生成器
  2. iOS 图形编程总结
  3. Newtonsoft.Json日常用法
  4. Linux安装配置tomcat
  5. 《PHP、MySQL和Apache入门经典(第5版)》一2.7 基本安全规则
  6. java获得时间和linux系统时间不一致
  7. python 遗传算法精简版
  8. 比Jquery FlexiGrid更好用 dotnetFlexGrid 1.2beta更新-增加展现模板模式(Grid中可以放编辑控件和任意Html内容了)...
  9. java 非法线程_JVM中的线程行为
  10. orcal 工具能连接上 程序连接不上_电脑无线网络连接不上怎么办