別の方法を次に示します。
>>> 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 項目を含むリストで機能するテストです。私のテストに欠陥がない限り (存在するとは思わない)、私が提供したソリューションは明らかにはるかに高速です。