4 回答
TA贡献1853条经验 获得超6个赞
如果仅使用少量文本即可完成此操作,则无需担心运行时效率:编码,检查和调试中的编程效率 更为重要。因此,您的解决方案很好,因为它甚至对于成千上万个单词来说都是清晰且足够有效的。(但是,您应该在循环之前只计算一次。)len(max(inputsentence, key=len))for
但是,假设您确实想使用一个大型的语料库来做这件事,它可能长达数GB?这是一次完成操作的方法,而无需将每个单词都存储在内存中(请注意,它inputcorpus可能是迭代器或分阶段读取语料库的函数):仅保存所有最长的单词。如果您看到的单词长于当前的最大值,则显然是此长度的第一个单词,因此您可以重新编写列表。
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)
如果重复某个最大长度的单词,您将得到几份副本。为了避免这种情况,只需使用set( )而不是列表(并调整初始化和扩展)即可。
TA贡献1851条经验 获得超5个赞
这个怎么样:
from itertools import groupby as gb
inputsentence = raw_input("Write a sentence: ").split()
lwords = list(next(gb(sorted(inputsentence, key=len, reverse=True), key=len))[1])
TA贡献1801条经验 获得超8个赞
defaultdict以长度为键使其为a并修改以下内容:
words = inputsentence.split()
from collections import defaultdict
dd = defaultdict(list)
for word in words:
dd[len(word)].append(word)
key_by_len = sorted(dd)
print dd[key_by_len[0]]
添加回答
举报