如何在python中找到列表的第二个最大值的位置?

2024-04-19 14:32:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从列表中找出n个最大值,然后打印出它们在列表中的位置。

如果我只关注最大值,它将如下所示:

>>>>fr = [8,4,1,1,12]

>>>>print fr.index(max(fr))

4

不过,我的目标是得到一个输出,如果n=3,则为:4,0,1

谢谢你的帮助!


Tags: 目标列表indexfrmaxprint
2条回答

^{}与key=fr.__getitem__一起使用:

>>> 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]

另一种方法是:

[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]

相关问题 更多 >