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

Kar*_*rus 5 python list

假设我有一个数字列表:

my_list = [3, 8, 4, 2, 8, 1, 1, 2, 5, 1]
Run Code Online (Sandbox Code Playgroud)

我现在想在这个列表中找到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
Run Code Online (Sandbox Code Playgroud)

在这里,无论是index1index21.这是因为max_vals8两个值,而my_list.index()只是搜索的第一个实例8.

我怎样才能得到前2值的指数在这种情况下,这样index11和以前一样,但index2现在是4,对应于其他8列表中?

另外,在列表中找到最大值,然后找到该值的索引似乎效率很低.有没有办法在一次清单中实现这一目标?

谢谢.

Ash*_*ary 10

您可以申请heapq.nlargestenumerate(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)
Run Code Online (Sandbox Code Playgroud)

  • 和`heapq.nlargest(2,range(len(my_list)),key = my_list .__ getitem __)`来得到索引. (4认同)