如何在python中的列表中找到最短的单词?

时间:2018-09-22 13:08:36

标签: python

我希望此函数返回列表中字符最少的单词。

这是我编写的代码:

def get_shortest_name(words):
    shortest_word = ""
    shortest_length = 0
    for word in words:
        if shortest_length > len(word):
            shortest_length = len(word)             
            shortest_word = word 
    return shortest_word

def test_get_shortest_name():
    print("1.", get_shortest_name(["Candide", "Jessie", "Kath", "Amity", "Raeanne"])) 

输出:1.凯斯

我得到了正确的输出,但是在其他隐藏测试中失败了。请帮助我找出代码中的一些问题。非常感谢!

3 个答案:

答案 0 :(得分:1)

您的代码有几个问题:

def get_shortest_name(words):
    shortest_word = ""
    shortest_length = 0

您以最短的0开头,所以... 任何单词的长度怎么会比这短呢?第一个解决方案是使用诸如

的一些硬编码值
shortest_length = 999

但是,这将假定绝不会有任何单词的最短单词的长度大于999 ...

另一个选择:

shortest_length = float('inf')

您确定任何单词的长度都小于无穷大。


奖金:一支班轮

您实际上可以将所有功能简化为一行:

shortest_word = min(words, key=lambda word: len(word))

我将让您查看python的https://i.stack.imgur.com/rCHWS.png内置函数。

答案 1 :(得分:0)

这是您代码的正确版本。它可以帮助您了解自己的代码出了什么问题。我已经用注释#表示了修改的行。除了两条修改的行,其他所有内容都保持不变。您的代码中的问题是""是您初始化的最短单词,因此没有选择其他单词作为最短单词,因为它们都具有有限的长度(大小)。

def get_shortest_name(words):
    shortest_word = words[0] # Choose first word as the smallest as starting point
    shortest_length = len(shortest_word) # Get the length of first word
    for word in words:
        if shortest_length > len(word):
            shortest_length = len(word)             
            shortest_word = word 
    return shortest_word

def test_get_shortest_name():
    print("1.", get_shortest_name(["Candide", "Jessie", "Kath", "Amity", "Raeanne"])) 

test_get_shortest_name()    

输出

1. Kath

答案 2 :(得分:0)

您可以按字长排序。没有人能确保列表中只有最短的单词

print(sorted(["Candide", "Jessie", "Kath" ,"Amity", "Raeanne"],key=lambda x: len(x)))