擅长:python、mysql、java
<p>您可以使用排序代替:</p>
<pre><code>maxed = sorted(inputlist, key=lambda i: len(i), reverse=True)
allmax = list(takewhile(lambda e: len(e) == len(maxed[0]), maxed))
</code></pre>
<p>这需要<code>O(n log n)</code>时间进行排序;但它很简单,而且很短,因为最长的元素都在开始时就可以轻松挑选。</p>
<p>对于<code>O(n)</code>解决方案,请使用循环:</p>
<pre><code>maxlist = []
maxlen = 0
for el in inputlist:
l = len(el)
if l > maxlen:
maxlist = [el]
maxlen = l
elif l == maxlen:
maxlist.append(el)
</code></pre>
<p>其中<code>maxlist</code>是根据需要生成和替换的,以便只保存最长的元素:</p>
<pre><code>>>> inputlist = 'And so we give a demo once more'.split()
>>> maxlist = []
>>> maxlen = 0
>>> for el in inputlist:
... l = len(el)
... if l > maxlen:
... maxlist = [el]
... maxlen = l
... elif l == maxlen:
... maxlist.append(el)
...
>>> maxlist
['give', 'demo', 'once', 'more']
</code></pre>