这是查找字符串中最长单词(复数)的有效方法吗?

时间:2013-06-01 13:58:14

标签: python string python-2.7 words

我是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不包含整数或标点符号,只包含一系列单词。

4 个答案:

答案 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)