Python列表:heapq.nlargest的索引,列表中包含重复值

时间:2014-02-27 17:51:49

标签: python list

假设我有一个数字列表:

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

此处,index1index2均为1。这是因为max_vals对这两个值都有8my_list.index()只搜索8的第一个实例。

在这种情况下,如何获得前2个值的索引,使index11一样index2,但4现在为8,对应于列表中的其他{{1}}?

另一方面,在列表中找到最大值,然后找到该值的索引似乎效率很低。是否有一种方法可以在列表的一次扫描中实现这一目标?

谢谢。

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)