在Python中,如何获取列表中5个最大值的索引?

In Python, how can I get the indices of the 5 greatest values of a list?

我有一个简单的清单:

a = [8, 5, 2, 20, 13, 14, 17, 13, 15, 21]

我可以得到列表中的 5 个最大值:

sorted(a)[-5:]

我怎样才能得到列表中 5 个最大值的 指数

因此,列表中的 5 个最大值是 [14, 15, 17, 20, 21],它们位于索引 [9, 3, 6, 8, 5] 处。我确信有多种策略可以考虑是否存在重复值,如果它们接近其他重要值,可能会给出它们的索引。

你可以这样做:

[a.index(x) for x in sorted(a)[-5:]]

访问文档并检查 index 函数。

len(sorted(a)) - 1 这将为您提供最大元素的索引。

len(sorted(a)) - 2 然后会给你第二大元素等等

你可以试试这个:

[x[0] for x in sorted(enumerate(a), key=lambda x: x[1])[-5:]]

好吧,这部分取决于您的列表中是否有重复值。

如果没有重复值,我认为最简单的答案可能是按照您提到的方式获取最大值,然后对于每个值,使用 index 找到该值的索引列表方法:[1,2,3].index(3)

简答:

 map(itemgetter(0), sorted(enumerate(lst), key=itemgetter(1), reverse=True))[:5]

作为函数:

from operator import itemgetter

def get_top_indices(lst, qnt=5):
    return map(itemgetter(0), sorted(enumerate(lst), key=itemgetter(1), reverse=True))[:qnt]

示例:

>>> get_top_indices([8, 5, 2, 20, 13, 14, 17, 13, 15, 21])
[9, 3, 6, 8, 5]
a = [8, 5, 2, 20, 13, 14, 17, 13, 15, 21]
b = sorted(a)[-5:]

c = [i for i , x in enumerate(a) if x in b]