擅长:python、mysql、java
<p>如果性能是一个问题(例如:您打算经常调用它),那么您绝对应该始终对列表进行排序和消除重复,并且只保留第一个、第二个或第n个元素(即<code>o(1)</code>)。</p>
<p>为此使用<a href="http://docs.python.org/2/library/bisect.html" rel="nofollow">^{<cd2>}</a>模块-它比“标准”<code>sort</code>更快。</p>
<p><code>insort</code>允许您插入一个元素,<code>bisect</code>将允许您查找是否应该插入(以避免重复)。</p>
<hr/>
<p>如果不是,我建议更简单的:</p>
<pre><code>def nth_largest(li, n):.
return sorted(set(li))[-(n+1)]
</code></pre>
<p>如果反向索引看起来很难看,可以执行以下操作:</p>
<pre><code>def nth_largest(li, n):
return sorted(set(li), reverse=True)[n]
</code></pre>