Python:在 List 或 numpy.ndarry 中查找最大的 Top-n 值的索引 [重复]

Posted

技术标签:

【中文标题】Python:在 List 或 numpy.ndarry 中查找最大的 Top-n 值的索引 [重复]【英文标题】:Python: Find most big Top-n values' index in List or numpy.ndarry [duplicate] 【发布时间】:2020-10-10 08:40:32 【问题描述】:

例如:

a = [1,5,6,2,3]

result = most_find(a, 3)

reslut
[2,1,4]  # the index of 6, 5, 3 in a

我知道如何用复杂的方式实现这个功能......

我的问题

有没有 Python 或 numpy 的内置函数可以处理?

【问题讨论】:

这能回答你的问题吗? How do I get indices of N maximum values in a NumPy array? 好的,谢谢!这是一种简单的工作方式 如果已经是numpy数组,那么链接的argsortargpartition应该是最快的。但是如果是列表,那么列表排序方法可能会更好。 @hpaulj,好的,我明白了!谢谢。我在想这个问题,直接的方法可能更好 【参考方案1】:

Sushanth 有一个内置链接,但您也可以像这样实现它:sorted(range(len(a)), key=lambda i: -a[i])[:3]

【讨论】:

【参考方案2】:

按值对索引进行排序,

def most_find(sequence, n):
    lst = sorted(range(len(sequence)), key=lambda x:sequence[x], reverse=True)
    return lst[:n]

a = [1, 5, 6, 2, 3]
result = most_find(a, 3)

print(result)

【讨论】:

【参考方案3】:

有没有 Python 或 numpy 的内置函数可以处理?

事实上,有!它叫numpy.argsort()

import numpy as np

a = [1, 5, 6, 2, 3]

print(np.array(a).argsort()[-3:][::-1]) # If you want to list the indexes of the 4 greatest numbers, change the -3 to -4, etc.

输出:

[2 1 4]

【讨论】:

以上是关于Python:在 List 或 numpy.ndarry 中查找最大的 Top-n 值的索引 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在Python中,何时使用Dictionary,List或Set?

Python:在 List 或 numpy.ndarry 中查找最大的 Top-n 值的索引 [重复]

python删除一列 python删除一行 list列表删除任意一行或一列 numpy删除一行或一列 超简单教程

Python迭代

Python list列表全部操作方法

python 从dict或list中删除无值