Get indices of top N values from list in the order of the values

Question:

I have a list like a=[3,5,7,12,4,1,5] and need to get the indices of the top K(=3) elements of this list, in the order of the elements. So in this case, result should be

[3,2,1]

since top 3 elements are 12, 7, 5 (last one is tie so first index is returned).

What is the simplest way to get this?

Asked By: S_S

||

Answers:

Personally, I would create a sorted list through the sorted method, then compare the first K values with the .index attribute of a. This will yield you your desired result.

K = 3 #Number of elemens

a = [3,5,7,12,4,1,5]

a_sorted = sorted(a,reverse=True)

b = [a.index(v) for v in a_sorted[:K]]
print(b)
>>> [3, 2, 1]
Answered By: Eros

I assume you mean 3,2,1 right?

[a.index(i) for i in sorted(a)[:3:-1]]
Answered By: bn_ln

As this is tagged , you can use numpy.argsort on the opposite values (for reverse sorting), then slice to get the K desired values:

a = np.array([3,5,7,12,4,18,1,5,18])
K = 3
out = np.argsort(-a)[:K]

output: array([3, 2, 1])

If you want the indices in order of the original array but not necessarily sorted themselves in order of the values, you can also use numpy.argpartition:

out = np.argpartition(a, K)[-K:]
Answered By: mozway
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.