提取列表中 n 个最高值的索引

将对应于另一个列表的 n 个最高值的索引提取到列表中的最有效方法是什么,同时保留我们从中提取索引的列表?


例如,假设我们有以下索引列表:


foo = [107,6,34,12,82]

如果我们请求列表 foo 的 2 个最高值的索引,它应该返回以下列表:


bar = [0,4]

这是我现在正在运行的,它真的效率低下,一点也不优雅,我真的不知道如何改进它:


foo = [107, 6, 34, 12, 82]

tmp = list(foo)

bar = []

no_of_indices_wanted = int(input())

for n in range(no_of_indices_wanted):

    bar.append(foo.index(max(foo)))

    foo.pop(foo.index(max(foo)))

foo = tmp


吃鸡游戏
浏览 272回答 3
3回答

杨魅力

您可以使用enumerate注释每个项目的索引,然后使用heapq.nlargest获取列表的最高两个,然后将索引提取到列表中:import heapqfrom operator import itemgetterprint(list(map(itemgetter(0), heapq.nlargest(2, enumerate(foo), key=itemgetter(1)))))这输出: [0, 4]

慕码人2483693

另一种方法是:foo = [107,6,34,12,82]n=2[i for i, x in sorted(enumerate(foo), key=lambda x: -x[1])[:n]]#[0, 4]

慕仙森

您可以对 的元组进行排序(value, index),然后恢复索引。def n_highest(lst, n):    ordered = sorted([(value, idx) for idx, value in enumerate(lst)], reverse=True)    return [idx for value, idx in ordered[:n]]print(n_highest([107, 6, 34, 12, 82], 2))输出[0, 4]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python