我怎样才能在这里正确使用追加?我是否正确遵循了指示?

时间:2013-11-28 04:22:39

标签: python

编写一个函数find_longest_word(wordList),它接受一个单词列表并返回列表中最长的单词。如果有多个最长的单词(即具有相同的长度),那么它应该返回它们中的第一个(即,在列表中的其他单词之前出现的单词)。

编写一个程序,要求用户输入一些由空格分隔的单词(全部在一行中)。然后你的程序应该创建一个包含输入单词的列表(你可以在字符串中使用内置的split方法)并输出列表和最长的单词(使用上面的函数)。

示例运行:

输入几个字,我会找到最长的:

快速的棕色狐狸跳过懒狗

输入的字词列表为:

<'>'''','快速','棕色','狐狸','跳','过',''','懒惰','狗']

列表中最长的单词是:

快速

我的代码

    def find_longest_word():

    lizt=[]
    s = input("Please type a sentence and I will out put the longest word. ")

    for word in s:
        lizt.append(word)

    x = max(s.split(), key=len)



    print('')
    print('The list of words entered is:')
    print(lizt)
    print(s.split())
    print('')
    print('The longest word is:')
    print(x)

find_longest_word()

3 个答案:

答案 0 :(得分:5)

for word in s:
        lizt.append(word)

这个循环错了。 s是一个字符串,word in s将遍历s中的每个字母,而不是每个空格分隔的字。您只需使用.split(),就不需要变量lizt

可以做:

lizt = []
for word in s.split():
    lizt.append(word)

但这只会导致lizts.split()相同。所以lizt = s.split()会更简单。

如果真的想要为此使用循环,您可以尝试放弃使用max并执行以下操作:

max_word, max_len = None, 0
for word in s.split():
    if len(word) > max_len:
        max_word, max_len = word, len(word)

但是使用splitmax更简单,更灵巧,而不必自己编写显式循环。

答案 1 :(得分:2)

使用for word in s:将导致Python浏览用户输入的字符串的每个字符。您应该使用lizt = s.split(),它会自动生成最初由输入中的单个空格分隔的str列表。这就是你想要的。

作为一点注意事项,您可以使用s.split('\t')之类的参数来使用不同的分隔符来分割单词。例如:

sentence = "Split function"
sentence.split() # -> ["Split", "function"]
sentence.split("i") # -> ["Spl","t funct","on"]

关于您对append的使用情况,您似乎了解如何将项目附加到list,以便如此粗略。

答案 2 :(得分:0)

我认为这段代码会做你想要的。字符串上的split方法创建单词列表。然后返回max函数,len函数作为键,为您提供列表中最长的单词。即它通过对每个值应用len并返回最长值来查找列表中的最大值。

s = "Please type a sentence and I will out put the longest word"
s_list = s.split()

def longest_word(s_list)

    return max(s_list, key=len)