liyang005

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


评论