假设我有一个数字列表:
my_list = [3, 8, 4, 2, 8, 1, 1, 2, 5, 1]
我现在想找到这个列表中两个最大数字的索引。所以,我尝试:
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
and index2
are 1
。这是因为max_vals
has 8
对于这两个值,并且my_list.index()
只是搜索第一个实例8
.
在这种情况下如何获得前 2 个值的索引,这样index1
is 1
和以前一样,但是index2
is now 4
,对应另一个8
在列表中?
附带说明一下,查找列表中的最大值,然后查找该值的索引似乎效率相当低。难道没有一种方法可以通过一次扫描列表来实现这一目标吗?
谢谢。
您可以申请heapq.nlargest
on 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)