假设我有一个数字列表:
my_list = [3, 8, 4, 2, 8, 1, 1, 2, 5, 1]
我现在想找到此列表中 2 个最大数字的索引。所以,我尝试:
import heapq
max_vals = heapq.nlargest(2, my_list)
index1 = my_list.index(max_vals[0])
index2 = my_list.index(max_vals[1])
print index1
print index2
在这里,index1
和index2
都1
.这是因为max_vals
对这两个值都8
,而my_list.index()
只搜索8
的第一个实例。
在这种情况下,如何获取前 2 个值的索引,以便像以前一样1
index1
,但现在index2
4
,对应于列表中的其他8
?
附带说明一下,在列表中找到最大值,然后找到该值的索引似乎效率低下。难道没有办法在一次扫过列表中实现这一点吗?
谢谢。
您可以在enumerate(list)
上应用heapq.nlargest
"
>>> import heapq
>>> data = heapq.nlargest(2, enumerate(my_list), key=lambda x:x[1])
>>> indices, vals = zip(*data)
>>> indices
(1, 4)
>>> vals
(8, 8)