擅长:python、mysql、java
<p>一个比在序列(不是iterable)上使用set()更快的解决方案是简单地计算第一个元素。这假设列表是非空的(但这很容易检查,并决定空列表中的结果应该是什么)</p>
<pre><code>x.count(x[0]) == len(x)
</code></pre>
<p>一些简单的基准:</p>
<pre><code>>>> timeit.timeit('len(set(s1))<=1', 's1=[1]*5000', number=10000)
1.4383411407470703
>>> timeit.timeit('len(set(s1))<=1', 's1=[1]*4999+[2]', number=10000)
1.4765670299530029
>>> timeit.timeit('s1.count(s1[0])==len(s1)', 's1=[1]*5000', number=10000)
0.26274609565734863
>>> timeit.timeit('s1.count(s1[0])==len(s1)', 's1=[1]*4999+[2]', number=10000)
0.25654196739196777
</code></pre>