在列表中的每个字符串末尾加上问号'?'

4
我试图在列表中的每个字符串末尾添加一个问号(?)。
目前,它会打印出 ['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']))

感谢您!

[s + "?" for s in ["cat", "dog", "person"]] - fenceop
6个回答

4
返回一个列表生成式将是最简单的解决方案:
return [s + "?" for s in l]

它比使用map更有效率。 你的代码存在许多潜在问题,为什么你看到"person?"三次是因为你在lambda中使用了"s",所以在最后一次迭代时,当"s"为"person"时,你将所有值都映射为等于"person + ?"。即使你在循环中改为使用"map(lambda x: x + '?', str_list)",那么每个字符串都会添加"* len(l)"个"?"。你只需返回"map(lambda x: x + '?', str_list)",但在这种情况下使用map没有任何好处。 你还没有使用Python 3,正如标签所示,如果你使用的是Python 3,你将看到类似于""的返回结果,而不是一个字符串列表。

3

使用以下内容:

def suffixQuestionMark(str_list):
    return map(lambda el: el + '?', str_list)

输出:

['cat?', 'dog?', 'person?']

以下是您代码中发生的情况:

str_list = map(lambda x: s + '?', str_list)

这行代码执行了3次(因为在迭代列表中有3个单词),每次迭代都会用['word?', 'word?', 'word?']列表覆盖str_list,其中word在第一次迭代中是cat,第二次是dog,最后是person。这就是为什么你最终得到了['person?', 'person?', 'person?']列表的原因。

2
请注意,实际上您不必使用“map”函数,在这里使用列表理解就可以了。
def suffix_question_mark(words):
    return [word+'?' for word in words]

0

map方法已经为您处理了迭代,因此不需要使用for循环:

items = ['first', 'second', 'third']
map(lambda item: item + '?', items) 
  => ['first?', 'second?', 'third?']

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?']

0
def suffixQuestionMark(str_list):
    k = [x+"?" for x in str_list]
    print k
suffixQuestionMark(['cat', 'dog', 'person'])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接