2013-06-02 83 views
10

Có chức năng tích hợp hay cách đơn giản để tìm chỉ mục của n phần tử lớn nhất trong danh sách hoặc mảng có nhiều mảng không?Cách tìm chỉ mục của n phần tử lớn nhất trong danh sách hoặc np.array, Python

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

Tìm chỉ mục của 5 thành phần lớn nhất?

tôi đếm các bản sao nhiều hơn một lần, và đầu ra phải là một danh sách các chỉ số của những con số lớn nhất

+0

Sản lượng mong đợi của bạn ở đây là gì? –

+2

bạn có tính trùng lặp nhiều lần không? – Colleen

+1

có thể trùng lặp của [Làm thế nào để có được chỉ số của N giá trị tối đa trong một mảng numpy?] (Http://stackoverflow.com/questions/6910641/how-to-get-indices-of-n-maximum-values-in- a-numpy-array) –

Trả lời

21

Có lẽ cái gì đó như:

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

hoặc sử dụng numpy, bạn có thể sử dụng argsort:

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

argsort cũng là một phương pháp:

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

Cảm ơn bạn rất nhiều. Đây là một câu trả lời rõ ràng và âm thanh –

+0

Cách khác là nhập khẩu heapq; heapq.nlargest (n, phạm vi (len (K)), khóa = lambda x: K [x]) ' –

2

Xét đoạn mã sau,

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

Nếu bạn muốn bỏ qua bản sao, sau đó sử dụng set() như sau,

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

Hy vọng rằng một trong số họ bao gồm câu hỏi của bạn :)

2

Điều này sẽ hoạt động:

K = [1,2,2,4,5,5,6,10] 
num = 5 
print 'K %s.' % (sorted(K, reverse=True)[:num]) 
Các vấn đề liên quan