2016-03-31 166 views
2

我試圖在列表中的每個字符串的末尾添加一個問號(?)。添加'?'到列表中的每個字符串的末尾

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

'[S + 「?」在[「貓」,「狗」,「人」]]中的s – fenceop

回答

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個字迭代後的列表),在每次迭代結束時用覆蓋列表,其中wordcat在第一次迭代中,dog在第二次,最後是person

這就是爲什麼你最終與['person?', 'person?', 'person?']列表。

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

返回列表補償將是最簡單的解決方案:

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>返回的不是字符串列表。

2

注意,你實際上並不使用map功能,列表理解就好了這裏:

def suffix_question_mark(words): 
    return [word+'?' for word in words] 
0
def suffixQuestionMark(str_list): 
    k = [x+"?" for x in str_list] 
    print k 
suffixQuestionMark(['cat', 'dog', 'person']) 
相關問題