【问题标题】:Return len of the longest word in a list [duplicate]返回列表中最长单词的 len [重复]
【发布时间】:2014-02-23 10:06:34
【问题描述】:

嗨,我正在尝试制作一个 python 程序,它会返回列表中最长单词的长度,但它对我来说效果不佳。

代码如下:

def find_longest_word():
   list1 = ['a','aa','aaa','aaaa','aaaaa','aaaaaa','aaaaaaa','aaaaaaaa',]
   max1 = ''
   for x in range (0, len(list1)):
      if (len(max1) < len(list1[x]) ):
          max1 = list1[x]
   return max1    


def main():
    m = find_longest_word()
    print len(m)

【问题讨论】:

  • 你的实际脚本是这样缩进的吗?
  • 那么问题出在哪里?当你运行它时会发生什么?不要说“它不起作用”!
  • 实际发生了什么? “效果不太好”非常含糊;据我们所知,它可能运行良好,而您可能只是希望它运行得更好。
  • 您忘记拨打main了吗?它不会被自动调用;您需要进行显式调用。
  • return max1 需要在右侧添加标签,并且您需要在某处将 main 称为 main()。空格在 python 中很重要。

标签: python list python-2.7 maxlength


【解决方案1】:

其实你的问题很简单:你忘了在脚本末尾调用main函数:

main()

当你这样做时,它会打印8,就像它应该的那样。


但是,如果您使用max 及其key function,则可以更轻松地完成此任务:

>>> list1 = ['a','aa','aaa','aaaa','aaaaa','aaaaaa','aaaaaaa','aaaaaaaa',]
>>> max(list1, key=len)
'aaaaaaaa'
>>> len(max(list1, key=len))
8
>>>

编辑:

虽然我的上述解决方案运行良好,但我想提供一个我刚刚想到的更短的解决方案:

>>> list1 = ['a','aa','aaa','aaaa','aaaaa','aaaaaa','aaaaaaa','aaaaaaaa',]
>>> max(map(len, list1))
8
>>>

此解决方案使用map,而不是关键功能。

【讨论】:

  • 哦。谢谢,但你能告诉我什么在我的代码中不起作用吗?我试图不在“内置就绪”功能中使用
  • @RomBecker - 好吧,既然你没有包含回溯,请给我一秒钟来运行你的代码。此外,您使用的lenrange 是“内置就绪函数”。
  • 哦,哈哈,我忘了调用 main() 函数……谢谢
  • @Downvoter - 你发现我的帖子有问题吗?请让我知道它是什么,以便我更正它。
【解决方案2】:

这应该可以工作

mx=0
for word in list1:
    if len(word)>mx:
        mx=len(word)
#now max will contain the length of longest word

编辑:这可能不是理想的答案,但目的是提供与相关代码相似的代码。

【讨论】:

  • 为什么从 1000 开始?如果列表中最长的单词少于 1000 个字母怎么办?
  • 请不要使用max作为变量,这应该只适用于函数max。
  • @StephenTG,哦。我应该把它初始化为零。我的错。无论如何,编辑它。
【解决方案3】:
def find_longest_word():
    list1 = ['a','aa','aaa','aaaa','aaaaa','aaaaaa','aaaaaaa','aaaaaaaa',]  # this should be a parameter
    max1 = ''
    for x in range (0, len(list1)):  # you don't have to include 0 in this
        if (len(max1) < len(list1[x]) ): 
            max1 = list1[x]
    return max1    


def main():
    m = find_longest_word()
    print len(m)

您的缩进是错误的,虽然这可能是粘贴到此处的格式。一种与您的功能具有相同结构的更简单方法:

def find_longest_word(lst):
    max1 = ''
    for x in lst:
        if (len(x) > len(max1)): 
            max1 = x
    return max1    


def main():
    m = find_longest_word()
    print len(m)

【讨论】:

  • 你需要从你的 for 循环中取出你的回报。事实上,这不会返回正确的值
  • 糟糕,感谢您指出这一点。
【解决方案4】:

通过反向排序,您也可以获得最长的字符串

sorted(list1,key=len,reverse=True)[0]
'aaaaaaaa'

【讨论】:

  • 对列表进行排序代价高昂,而且代码的可读性不如 max
  • 这既低效又漏洞百出。您按字典顺序而不是长度排序。
  • cmp属性也可以使用len函数
  • 哦,哈哈,我忘记调用 main() 函数了……谢谢你们
  • 排序(list1,key=len,reverse=True)[0]
【解决方案5】:

看看这个:

'''写一个函数find_longest_word(),它接受一个单词列表和 返回最长的长度。'''

a = ['mamao', 'abacate', 'pera', 'goiaba', 'uva', 'abacaxi', 'laranja', 'maca']

def find_longest_word(a):

    d = []
    for c in a:
        d.append(len(c))
        e = max(d)  #Try "min" :D
    for b in a:
        if len(b) == e:
            print "Length is %i for %s" %(len(b), b)

【讨论】:

  • 请不要在多个地方发布相同的答案。将问题标记为重复。
  • 不知道,我的错!
猜你喜欢
  • 2020-07-12
  • 2017-03-30
  • 1970-01-01
  • 2019-04-28
  • 2013-01-16
  • 2012-04-12
  • 2020-03-04
  • 1970-01-01
  • 2016-06-29
相关资源
最近更新 更多