2016-06-23 4 views
0

最近のPythonの宿題の場合、リスト内で単語 'd'で始まる単語を返す関数を作成するように割り当てられました。ネストされたif文をラムダ関数(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 

私は程度満足しているコード、実行したときに、私は作品を書いた上記の場合はネストされた声明(:D)をここに関連するコードです。しかし、より多くのpythonicと言語に敏感にしようとすると、私はwhy Lambda functions are usefulと非常に有用な記事を発見した可能性がラムダでこの同じ課題を解決する方法が、私はこの場合に動作させる方法を見つけることができませんでした。

ラムダ関数として上記のネストされたif文を書く方法についてのガイダンスをお願いします。条件は次のようになり場合ように

+0

'[(ラムダX:X)(単語)で単語(ラムダX:X)用(letter_list)の場合(

しかし、何をやっている表現する簡潔な方法がありますラムダx、y、z:x [y] == z)(単語、x、文字)] ' – donkopotamus

答えて

5

、あなたのラムダ同等:さらに

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

、あなたは[0]を比較.startswith(..)の代わりに使用することができます。その後のようなものになり:

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

しかし、もっとニシキヘビは次のとおりです。

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

doesnのいくつかの並べ替えのラムダに場合を変更するので、私は、あなたが求めているのかわからないんだけど」有用であると思われる。失敗したコードを投稿することを怠ったので、われわれはあなたが望むものを知っています。

def filter_words(word_list, letter): 
    return [word in letter_list if word[0] == letter] 
関連する問題