猿问

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

我是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)

这样,我便可以列出最长的单词列表。有没有更好的方法可以做到这一点?


注意:假设不inputsentence包含整数或标点符号,而仅包含一系列单词。


慕后森
浏览 208回答 4
4回答

墨色风雨

如果仅使用少量文本即可完成此操作,则无需担心运行时效率:编码,检查和调试中的编程效率 更为重要。因此,您的解决方案很好,因为它甚至对于成千上万个单词来说都是清晰且足够有效的。(但是,您应该在循环之前只计算一次。)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( )而不是列表(并调整初始化和扩展)即可。

江户川乱折腾

  这个怎么样:from itertools import groupby as gbinputsentence = raw_input("Write a sentence: ").split() lwords = list(next(gb(sorted(inputsentence, key=len, reverse=True), key=len))[1])

蝴蝶刀刀

defaultdict以长度为键使其为a并修改以下内容:words = inputsentence.split()from collections import defaultdictdd = defaultdict(list)for word in words:    dd[len(word)].append(word)key_by_len = sorted(dd)print dd[key_by_len[0]]
随时随地看视频慕课网APP

相关分类

Python
我要回答