我有一个清单说a = [5,3,1,4,10]
。我需要获取列表前两个值的索引,即 for5
并且10
我会得到[0, 4]
. Python 是否为这种情况提供了单行代码?
问问题
101926 次
2 回答
116
sorted(range(len(a)), key=lambda i: a[i])[-2:]
或者
sorted(range(len(a)), key=lambda i: a[i], reverse=True)[:2]
或者
import operator
zip(*sorted(enumerate(a), key=operator.itemgetter(1)))[0][-2:]
或(对于长列表),考虑使用heapq.nlargest
zip(*heapq.nlargest(2, enumerate(a), key=operator.itemgetter(1)))[0]
于 2012-10-25T14:10:51.860 回答
29
只是一个 NumPy 替代方案:
import numpy as np
top_2_idx = np.argsort(a)[-2:]
top_2_values = [a[i] for i in top_2_idx]
于 2016-08-08T18:12:08.830 回答