假设我有一个数字列表:
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个值的索引,使index1
与1
一样index2
,但4
现在为8
,对应于列表中的其他{{1}}?
另一方面,在列表中找到最大值,然后找到该值的索引似乎效率很低。是否有一种方法可以在列表的一次扫描中实现这一目标?
谢谢。
答案 0 :(得分:9)
您可以在heapq.nlargest
“
enumerate(list)
>>> import heapq
>>> data = heapq.nlargest(2, enumerate(my_list), key=lambda x:x[1])
>>> indices, vals = zip(*data)
>>> indices
(1, 4)
>>> vals
(8, 8)