Python lists:heapq.nbiggest 的索引,列表中有重复的值



假设我有一个数字列表:

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

在这里,index1index21.这是因为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)

最新更新