gpt4 book ai didi

python - 在具有重复元素的列表中查找第二大元素

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:51 24 4
gpt4 key购买 nike

我有一个列表,其中有几个特意设置的非常大的值来区分这些索引,它看起来像这样:

a = [1.3, 2.1, 9999., 5., 3.7 ,6.6, 9999., 7.4, 9999., 3.5, 7, 1.2, 9999.]

我需要在该列表中找到第二大值,它等于9999。(在上面的例子中,它将是7.4) 以最有效的方式(我的列表可能会变得很大)

在这个问题Retrieve the two highest item from a list containing 100,000 integers提到了 heapq.nlargest 函数,但由于我有多个值 9999。 它不起作用。

最佳答案

另一种方法:

>>> a = [1.3, 2.1, 9999., 5., 3.7 ,6.6, 9999., 7.4, 9999., 3.5, 7, 1.2, 9999.]
>>> sorted(set(a))[-2]
7.4
>>>

而且,不管你信不信,它实际上比公认的解决方案快得多:

>>> from timeit import timeit
>>> timeit("a=range(10000000);print sorted(set(a))[-2]", number=10)
9999998
9999998
9999998
9999998
9999998
9999998
9999998
9999998
9999998
9999998
34.327036257401424
>>> # This is NPE's answer
>>> timeit("a=range(10000000);maxa = max(a);print max(val for val in a if val != maxa)", number=10)
9999998
9999998
9999998
9999998
9999998
9999998
9999998
9999998
9999998
9999998
53.22811809880869
>>>

以上是运行 10 次并使用包含 10,000,000 项的列表的测试。除非我的测试有缺陷(我认为没有),否则我给出的解决方案显然要快得多。

关于python - 在具有重复元素的列表中查找第二大元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19412828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com