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

Log*_*ang 13 python arrays list

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

K = [1,2,2,4,5,5,6,10]
Run Code Online (Sandbox Code Playgroud)

找到最大的5个元素的索引?

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

DSM*_*DSM 28

也许是这样的:

>>> 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]
Run Code Online (Sandbox Code Playgroud)

或使用numpy,您可以使用argsort:

>>> np.argsort(K)[-5:]
array([0, 1, 5, 3, 7])
Run Code Online (Sandbox Code Playgroud)

argsort 也是一种方法:

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

  • 或者 `import heapq;heapq.nlargest(n, range(len(K)), key=lambda x: K[x])` (3认同)