我是Python的新手,发现了一些关于在字符串中找到最长WORD的建议,但是没有一个建议占用了一个字符串,其中包含了与最长字符串相匹配的字符串。
在玩完之后,我决定这个:
inputsentence = raw_input("Write a sentence: ").split()
longestwords = []
for word in inputsentence:
if len(word) == len(max(inputsentence, key=len)):
longestwords.append(word)
通过这种方式,我列出了我可以做的最长的单词。有没有更好的方法呢?
NB:假设inputsentence
不包含整数或标点符号,只包含一系列单词。
答案 0 :(得分:3)
如果您只使用少量文字进行此操作,则无需担心运行时效率:编程效率, 编码,审核和调试,更为重要。因此,您所拥有的解决方案很好,因为即使是数千个单词,它也很清晰且充分有效。 (但是,您应该在len(max(inputsentence, key=len))
循环之前计算for
一次。)
但是假设你确实想用大型语料库做这个,这可能是几千兆字节?以下是如何一次性,而不是将每个单词都存储在内存中(注意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( )
而不是列表(并调整初始化和扩展)。
答案 1 :(得分:1)
这个怎么样:
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])
答案 2 :(得分:0)
将其设为defaultdict
,并将长度作为键,并调整以下内容:
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]]
答案 3 :(得分:0)
希望这有帮助:
print max(raw_input().split(), key=len)