为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕后森 2021-03-24 22:18:29
我是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包含整数或标点符号,而仅包含一系列单词。
查看完整描述

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( )而不是列表(并调整初始化和扩展)即可。


查看完整回答
反对 回复 2021-03-29
?
江户川乱折腾

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])


查看完整回答
反对 回复 2021-03-29
?
蝴蝶刀刀

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]]


查看完整回答
反对 回复 2021-03-29
  • 4 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信