我有一个名单a = [5,3,1,4,10]
。我需要得到列表的前两个值的索引,即5和10.是否有一个python为这种情况提供的单行程序?
答案 0 :(得分:74)
sorted(range(len(a)), key=lambda i: a[i])[-2:]
或
sorted(range(len(a)), key=lambda i: a[i], reverse=True)[:2]
或
zip(*sorted(enumerate(a), key=operator.itemgetter(1)))[0][-2:]
或(对于长名单)
zip(*heapq.nlargest(2, enumerate(a), key=operator.itemgetter(1)))[0]
答案 1 :(得分:12)
只是一个笨拙的选择:
import numpy as np
top_2_idx = np.argsort(a)[-2:]
top_2_values = [a[i] for i in top_2_idx]