如何查找列表或np.array中n个最大元素的索引,Python

如何查找列表或np.array中n个最大元素的索引,Python,python,arrays,list,Python,Arrays,List,有没有内置函数或非常简单的方法来查找列表或numpy数组中n个最大元素的索引 K = [1,2,2,4,5,5,6,10] 找到最大的5个元素的索引 我不止一次地计算重复项,并且输出应该是那些最大数字的索引列表可能类似于: >>> K [4, 5, 1, 6, 2, 5, 2, 10] >>> sorted(range(len(K)), key=lambda x: K[x]) [2, 4, 6, 0, 1, 5, 3, 7] >>> sor

有没有内置函数或非常简单的方法来查找列表或numpy数组中n个最大元素的索引

K = [1,2,2,4,5,5,6,10]
找到最大的5个元素的索引

我不止一次地计算重复项,并且输出应该是那些最大数字的索引列表

可能类似于:

>>> K
[4, 5, 1, 6, 2, 5, 2, 10]
>>> sorted(range(len(K)), key=lambda x: K[x])
[2, 4, 6, 0, 1, 5, 3, 7]
>>> sorted(range(len(K)), key=lambda x: K[x])[-5:]
[0, 1, 5, 3, 7]
或者使用
numpy
,您可以使用
argsort

>>> np.argsort(K)[-5:]
array([0, 1, 5, 3, 7])
argsort
也是一种方法:

>>> K = np.array(K)
>>> K.argsort()[-5:]
array([0, 1, 5, 3, 7])
>>> K[K.argsort()[-5:]]
array([ 4,  5,  5,  6, 10])

考虑以下代码

 N=5
 K = [1,10,2,4,5,5,6,2]
 #store list in tmp to retrieve index
 tmp=list(K)
 #sort list so that largest elements are on the far right
 K.sort()
 #To get the 5 largest elements
 print K[-N:]
 #To get the 5th largest element
 print K[-N]
 #get index of the 5th largest element
 print tmp.index(K[-N])
如果希望忽略重复项,请按如下所示使用set()

 N=5
 K = [1,10,2,4,5,5,6,2]
 #store list in tmp to retrieve index
 tmp=list(K)
 #sort list so that largest elements are on the far right
 K.sort()
 #Putting the list to a set removes duplicates
 K=set(K)
 #change K back to list since set does not support indexing
 K=list(K)
 #To get the 5 largest elements
 print K[-N:]
 #To get the 5th largest element
 print K[-N]
 #get index of the 5th largest element
 print tmp.index(K[-N])
希望其中一个能回答您的问题:)

这应该可以:

K = [1,2,2,4,5,5,6,10]
num = 5
print 'K %s.' % (sorted(K, reverse=True)[:num])

导入标题q


然后使用函数
nlargest()

此处的预期输出是什么?是否多次计算重复项?可能重复的
[1,2,2,4,5,10,5,6,10]
,在这种情况下的输出是什么?或者
导入heapq;heapq.nlargest(n,range(len(K)),key=lambda x:K[x])
这会给出值本身,但不会给出它们的索引