添加'?'到列表中每个字符串的末尾

时间:2016-03-31 21:01:49

标签: python loops python-3.x dictionary lambda

我正在尝试在列表中的每个字符串的末尾添加问号(?)。

目前正在打印['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']))

谢谢!

6 个答案:

答案 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'])