Python 小写列表理解测试似乎是正确的?
Python lowercase list comprehension failing tests when it seems to be right?
我正在上一门 Python 课程,其中涉及完成大量在线问题,任务看起来非常简单(获取一个字符串列表并将其转换为小写)。但是,无论我尝试什么,我的代码都会失败。我试过列表理解和循环,但无济于事——它只是说测试失败。
这是下面的代码:
def lowercase(strings):
"""takes a list strings and replaces string with lowercase words"""
strings = [x.lower() for x in strings]
return strings
strings = ['LOWER', 'CASE', 'SENTENCE']
lowercase(strings)
print(strings)
我提供的零件是:
def lowercase(strings):
"""takes a list strings and replaces string with lowercase words"""
strings = ['LOWER', 'CASE', 'SENTENCE']
lowercase(strings)
print(strings)
所以我只允许在将 'strings' 更改为小写的函数中编写代码(我可以在文档字符串下编写代码,但我不能修改任何其他内容,例如删除这三行测试代码)。因为他们的测试在我的代码下声明了字符串并调用了函数,所以它似乎只是覆盖了我写的任何东西!我觉得我快疯了,因为这是一个初学者问题,我无法通过测试。我做错了什么?谢谢!
您的问题是您的函数在其中复制了 strings
,并在其中复制了 returns。相反,您想就地修改列表。
这是您可以做到的一种方法:
def lowercase(strings):
"""takes a list strings and replaces string with lowercase words"""
for i, x in enumerate(strings):
strings[i] = x.lower()
strings = ['LOWER', 'CASE', 'SENTENCE']
lowercase(strings)
print(strings)
#['lower', 'case', 'sentence']
而不是列表理解(创建一个新列表),迭代 strings
的索引并修改每个元素。
您只需要一个小改动:使用切片赋值就地修改列表,而不是创建新列表。然后你就不需要 return 它了(事实上,Python 约定是不要这样做)。
def lowercase(strings):
"""takes a list of strings and replaces each with lowercase version"""
strings[:] = (x.lower() for x in strings)
使用相同的列表理解代码试试这个
strings = ['LOWER', 'CASE', 'SENTENCE']
strings = lowercase(strings)
print(strings)
我正在上一门 Python 课程,其中涉及完成大量在线问题,任务看起来非常简单(获取一个字符串列表并将其转换为小写)。但是,无论我尝试什么,我的代码都会失败。我试过列表理解和循环,但无济于事——它只是说测试失败。 这是下面的代码:
def lowercase(strings):
"""takes a list strings and replaces string with lowercase words"""
strings = [x.lower() for x in strings]
return strings
strings = ['LOWER', 'CASE', 'SENTENCE']
lowercase(strings)
print(strings)
我提供的零件是:
def lowercase(strings):
"""takes a list strings and replaces string with lowercase words"""
strings = ['LOWER', 'CASE', 'SENTENCE']
lowercase(strings)
print(strings)
所以我只允许在将 'strings' 更改为小写的函数中编写代码(我可以在文档字符串下编写代码,但我不能修改任何其他内容,例如删除这三行测试代码)。因为他们的测试在我的代码下声明了字符串并调用了函数,所以它似乎只是覆盖了我写的任何东西!我觉得我快疯了,因为这是一个初学者问题,我无法通过测试。我做错了什么?谢谢!
您的问题是您的函数在其中复制了 strings
,并在其中复制了 returns。相反,您想就地修改列表。
这是您可以做到的一种方法:
def lowercase(strings):
"""takes a list strings and replaces string with lowercase words"""
for i, x in enumerate(strings):
strings[i] = x.lower()
strings = ['LOWER', 'CASE', 'SENTENCE']
lowercase(strings)
print(strings)
#['lower', 'case', 'sentence']
而不是列表理解(创建一个新列表),迭代 strings
的索引并修改每个元素。
您只需要一个小改动:使用切片赋值就地修改列表,而不是创建新列表。然后你就不需要 return 它了(事实上,Python 约定是不要这样做)。
def lowercase(strings):
"""takes a list of strings and replaces each with lowercase version"""
strings[:] = (x.lower() for x in strings)
使用相同的列表理解代码试试这个
strings = ['LOWER', 'CASE', 'SENTENCE']
strings = lowercase(strings)
print(strings)