将对应于另一个列表的 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
3 回答
杨魅力
TA贡献1811条经验 获得超6个赞
您可以使用enumerate注释每个项目的索引,然后使用heapq.nlargest获取列表的最高两个,然后将索引提取到列表中:
import heapq
from operator import itemgetter
print(list(map(itemgetter(0), heapq.nlargest(2, enumerate(foo), key=itemgetter(1)))))
这输出: [0, 4]
慕码人2483693
TA贡献1860条经验 获得超9个赞
另一种方法是:
foo = [107,6,34,12,82]
n=2
[i for i, x in sorted(enumerate(foo), key=lambda x: -x[1])[:n]]
#[0, 4]
慕仙森
TA贡献1827条经验 获得超7个赞
您可以对 的元组进行排序(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]
添加回答
举报
0/150
提交
取消