擅长:python、mysql、java
<p>如果您只使用少量的文本来完成这项工作,则无需担心运行时效率:<strong>编程效率,</strong><em>在编码、审查和调试中,</em>要重要得多。所以你的解决方案是好的,因为它是清晰的,足够有效的,甚至数千字。(但是,您应该在<code>for</code>循环之前只计算一次<code>len(max(inputsentence, key=len))</code>。)</p>
<p>但是,假设您确实想用一个可能有几GB长的大型语料库来完成这项工作?下面是如何在一个过程中<strong>完成这项工作,</strong>而不将每个单词存储在内存中(注意,<code>inputcorpus</code>可能是一个迭代器函数,它分阶段读取语料库):只保存所有<em>最长的</em>单词。如果你看到一个单词的长度超过了当前的最大值,那么它显然是这个长度的第一个单词,所以你可以开始一个新的列表。在</p>
<pre><code>maxlength = 0
maxwords = [ ] # unnecessary: will be re-initialized below
for word in inputcorpus:
if len(word) > maxlength:
maxlength = len(word)
maxwords = [ word ]
elif len(word) == maxlength:
maxwords.append(word)
</code></pre>
<p>如果某个最大长度的单词重复出现,你将得到几个副本。要避免这种情况,只需使用<code>set( )</code>而不是列表(并调整初始化和扩展)。在</p>