zz查找一维list的最大/小前n个数,及其对应的位置的方法python:heapq
这里要借助到python的内置模块heapq,其原理是基于堆的,也就是二叉树
import heapq
a=[1,2,3,4,5]
re1 = map(a.index, heapq.nlargest(3, a)) #求最大的三个索引 nsmallest与nlargest相反,求最小
re2 = heapq.nlargest(3, a) #求最大的三个元素
print(list(re1)) #因为re1由map()生成的不是list,直接print不出来,添加list()就行了
print(re2)
输出结果为
[4, 3, 2]
[5, 4, 3]
---------------------
版权声明:本文为CSDN博主「萝卜吃土豆」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41973536/article/details/84865595
=====
补充说明,只有list才有index,因此如果是数组a,需要转化为list,方法就是list(a)
如果a原本为list,但是希望a的每列前n个最大/小值及位置,则需要
直接切片是不行的:
>>> a=[[1,2,3], [4,5,6]]
>>> a[:, 0] # 尝试用数组的方法读取一列失败
TypeError: list indices must be integers or slices, not tuple
我们可以直接构造:
>>> b = [i[0] for i in a] # 从a中的每一行取第一个元素。
>>> print(b)
[1, 4]
---------------------
版权声明:本文为CSDN博主「xiaotao_1」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaotao_1/article/details/80729458
评论