2016-06-23 2 views
0

Für eine aktuelle Python-Hausaufgabe wurden wir angewiesen, eine Funktion zu erstellen, die Wörter in einer Liste zurückgibt, die mit 'd' beginnt. Hier ist der relevante Code:So konvertieren Sie eine verschachtelte if-Anweisung in eine Lambda-Funktion (Python)

def filter_words(word_list, letter): 
''' 
INPUT: list of words, string 
OUTPUT: list of words 

Return the words from word_list which start with the given letter. 

Example: 
>>> filter_words(["salumeria", "dandelion", "yamo", "doc loi", "rosamunde", 
        "beretta", "ike's", "delfina"], "d") 
['dandelion', 'doc loi', 'delfina'] 
''' 

letter_list = [] 
for word in word_list: 
     if word[0] == letter: 
      letter_list.append(word) 
return letter_list 

Die oben geschachtelt if-Anweisung, dass ich Werke geschrieben, wenn ich den Code ausführen, die ich bin glücklich über (: D); Als ich jedoch versuchte, pythischer und schlauer mit der Sprache zu werden, fand ich einen sehr hilfreichen Artikel über why Lambda functions are useful und wie man diese gleiche Herausforderung mit einem Lambda lösen könnte, aber ich konnte nicht herausfinden, wie man es in diesem Fall zum Laufen bringt.

Ich frage nach Anleitung, wie ich meine oben geschachtelte if-Anweisung möglicherweise als eine Lambda-Funktion schreiben kann.

+0

'[(lambda x: x) (Wort) für Wort in (lambda x: x) (letter_list) if (Lambda x, y, z: x [y] == z) (Wort, x, Buchstabe)] ' – donkopotamus

Antwort

5

In einer Art und Weise, die Lambda-Äquivalent Ihrer wenn die Bedingung wäre:

fn = lambda x: x[0] == 'd' #fn("dog") => True, fn("test") => False 

Ferner Sie .startswith(..) statt Vergleich [0] verwenden können. Es wird dann so etwas wie:

letter_list = filter(lambda x: x.startswith('d'), word_list) 

Aber mehr pythonic ist:

letter_list = [x for x in word_list if x.startswith('d')] 
1

Ich bin nicht sicher, was Sie fragen, weil die Änderung das wenn in ein Lambda irgendeine Art doesn‘ t scheint nützlich zu sein. Sie haben es versäumt, Ihren fehlgeschlagenen Code zu posten, damit wir wissen, was Sie wollen.

Allerdings gibt es eine prägnante Art und Weise auszudrücken, was du tust:

def filter_words(word_list, letter): 
    return [word in letter_list if word[0] == letter] 
Verwandte Themen