我希望此函数返回列表中字符最少的单词。
这是我编写的代码:
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.凯斯
我得到了正确的输出,但是在其他隐藏测试中失败了。请帮助我找出代码中的一些问题。非常感谢!
答案 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)))