Как найти индекс n самых больших элементов в списке или np.array, Python

Есть ли встроенная функция или очень простой способ найти индекс n самых больших элементов в списке или массиве?

K = [1,2,2,4,5,5,6,10]

Найти индекс 5 крупнейших элементов?

Я считаю дубликаты более одного раза, и на выходе должен быть список индексов тех самых больших чисел

 Ashwini Chaudhary02 июн. 2013 г., 03:09
как насчет[1,2,2,4,5,10,5,6,10]какой будет выход в этом случае?
 Ashwini Chaudhary02 июн. 2013 г., 02:47
каков ваш ожидаемый результат здесь?
 John Zwinck02 июн. 2013 г., 03:07
 Colleen02 июн. 2013 г., 02:49
Вы считаете дубликаты более одного раза?

Ответы на вопрос(3)

Решение Вопроса

Может быть что-то вроде:

>>> 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])
 Logan Yang02 июн. 2013 г., 03:31
Огромное спасибо. Это один ясный и здравый ответ
 Makers_F30 нояб. 2015 г., 08:07
альтернативноimport heapq;heapq.nlargest(n, range(len(K)), key=lambda x: K[x])

Рассмотрим следующий код,

 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])

Ваш ответ на вопрос