在保留要从中提取索引的列表的同时,将与另一个列表的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
您可以使用enumerate
注释每个项目的索引,然后使用heapq.nlargest
来获取列表中的前两个,然后将索引提取到列表中:
import heapq
from operator import itemgetter
print(list(map(itemgetter(0), heapq.nlargest(2, enumerate(foo), key=itemgetter(1)))))
输出: [0, 4]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句