我正在尝试在列表中的每个字符串的末尾添加问号(?)。
目前正在打印['person?', 'person?', 'person?']
,但我希望打印['cat?', 'dog?', 'person?']
。
有人可以帮我弄清楚我做错了吗?
def suffixQuestionMark(str_list):
'''Returns a list of the same strings but with ? suffixed to each'''
for s in str_list:
str_list = map(lambda x: s + '?', str_list)
return str_list
print (suffixQuestionMark(['cat', 'dog', 'person']))
谢谢!
答案 0 :(得分:3)
返回列表comp将是最简单的解决方案:
return [s + "?" for s in l]
它也比使用地图更有效。
你自己的代码有很多潜在的问题,为什么你看到person?
三次是因为你在lambda中使用s
所以在最后一次迭代时s
是人,您将所有值映射为person + ?
。即使您在循环中更改为map(lambda x: x + '?', str_list)
,您也会在每个字符串中添加* len(l)
?
。你只需要return map(lambda x: x + '?', str_list)
,但在这个例子中使用map没有任何好处。
你也没有像标签所暗示的那样使用python 3,如果你是,你会看到像<map object at 0x7fd27a4060f0>
这样的东西没有返回字符串列表。
答案 1 :(得分:2)
使用此:
def suffixQuestionMark(str_list):
return map(lambda el: el + '?', str_list)
输出:
['cat?', 'dog?', 'person?']
以下是您的代码中的内容:
str_list = map(lambda x: s + '?', str_list)
此行执行3次(因为迭代列表中有3个单词),在每次迭代结束时使用str_list
列表覆盖['word?', 'word?', 'word?']
,其中word
在第一次迭代中为cat
,在第二次迭代中为dog
,最后为person
。
这就是为什么你最终得到['person?', 'person?', 'person?']
列表。
答案 2 :(得分:2)
请注意,您实际上没有 使用map
功能,列表理解就可以了:
def suffix_question_mark(words):
return [word+'?' for word in words]
答案 3 :(得分:0)
map
方法已经为您处理迭代,因此不需要for
循环:
items = ['first', 'second', 'third']
map(lambda item: item + '?', items)
=> ['first?', 'second?', 'third?']
答案 4 :(得分:0)
问题是您要为列表中的每个字符串重新映射列表。
map
函数自动遍历列表并在其上执行lambda。
def suffixQuestionMark(str_list):
'''Returns a list of the same strings but with ? suffixed to each'''
return map(lambda s: s + '?', str_list)
print (suffixQuestionMark(['cat', 'dog', 'person']))
# prints ['cat?', 'dog?', 'person?']
答案 5 :(得分:0)
def suffixQuestionMark(str_list):
k = [x+"?" for x in str_list]
print k
suffixQuestionMark(['cat', 'dog', 'person'])