2016-03-31 11 views
2

Ich versuche, ein Fragezeichen (?) am Ende jeder Zeichenfolge in einer Liste hinzuzufügen.Hinzufügen '?' bis zum Ende jeder Zeichenfolge in einer Liste

Derzeit druckt es ['person?', 'person?', 'person?'], aber ich möchte es ['cat?', 'dog?', 'person?'] drucken.

Könnte jemand bitte mir helfen, herauszufinden, was ich falsch mache?

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

Vielen Dank!

+0

'[s + "?" für s in ["Katze", "Hund", "Person"]] – fenceop

Antwort

2

verwenden:

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

Ausgang:

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

Hier ist, was in Ihrem Code gehen wurde:

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

diese Linie führt 3-mal (da es 3 Wörter die Iterated-on-Liste) und überschreibt die str_list am Ende jeder Iteration mit der ['word?', 'word?', 'word?'] Liste, wobei word in der ersten Iteration cat ist, und dog in der zweiten, und schließlich person.

Und deshalb enden Sie mit der ['person?', 'person?', 'person?'] Liste.

0

die map Methode bereits behandelt die Iteration für Sie also keine for Schleife ist notwendig:

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

Das Problem ist, dass Sie in Ihrer Liste für jede Zeichenfolge der Liste neu zuordnen.

Die Funktion map iteriert automatisch durch die Liste und führt das Lambda darauf aus.

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

eine Liste comp Rückkehr wäre die einfachste Lösung sein:

return [s + "?" for s in l] 

Es ist auch effizienter sein wird als Karte.

Ihre eigenen Code hat man eine Menge von möglichen Problemen, warum Sie person? dreimal zu sehen ist, weil Sie s im Lambda so auf der letzten Iteration verwenden, wenn s Person ist, alle Werte abzubilden gleich person + ? sein. Selbst wenn Sie in der Schleife zu map(lambda x: x + '?', str_list) gewechselt haben, würden Sie dann zu jeder Zeichenkette * len(l)? hinzugefügt bekommen. Sie würden einfach return map(lambda x: x + '?', str_list), aber es gibt keinen Vorteil mit Karte in diesem Fall.

Sie verwenden auch nicht Python 3 als das Tag schlägt vor, wenn Sie waren, würden Sie sehen, wie <map object at 0x7fd27a4060f0> zurückgegeben keine Liste der Zeichenfolgen.

2

Beachten Sie, dass Sie nicht wirklich haben die map Funktion zu nutzen, eine Liste Verständnis ist ganz gut hier:

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']) 
Verwandte Themen