我试图从列表中找到n个最大值,然后在列表中打印出它们的位置。
如果我只关注最大值。价值,它看起来像这样:
>>>>fr = [8,4,1,1,12]
>>>>print fr.index(max(fr))
4
然而,我的目标是获得如下输出:4,0,1,如果它是n = 3
感谢您的帮助!
答案 0 :(得分:12)
使用密钥= fr.__getitem__
的{{3}}:
>>> import heapq
>>> fr = [8,4,1,1,12]
>>> heapq.nlargest(3, xrange(len(fr)), key=fr.__getitem__)
[4, 0, 1]
如果您想要值本身,那么:
>>> heapq.nlargest(3, fr)
[12, 8, 4]
答案 1 :(得分:2)
另一种方式是:
[fr.index(x) for x in sorted(fr, reverse=True)[:3]]
当我们比较两者的速度时......
import heapq
fr = [8, 4, 1, 1, 12]
def method_one():
for i in xrange(10000):
res = [fr.index(x) for x in sorted(fr, reverse=True)[:3]]
def method_two():
for i in xrange(10000):
heapq.nlargest(3, xrange(len(fr)), key=fr.__getitem__)
if __name__ == '__main__':
import timeit
print timeit.repeat(stmt='method_one()',
setup='from __main__ import method_one',
number=100)
print timeit.repeat(stmt='method_two()',
setup='from __main__ import method_two',
number=100)
我们得到:
[1.1253619194030762, 1.1268768310546875, 1.128382921218872]
[2.5129621028900146, 2.529547929763794, 2.492828130722046]
答案 2 :(得分:0)
最简单的方法是 -
In[0]: import numpy as np
...: a = [1,4,2,5]
...: a.remove(sorted(a)[-1])
...: np.argmax(a)
Out[0]: 1