基礎・上級問題チェック
問題 16 /40
次のコードを実行したときの処理として、正しいものはどれか。
num = [1, 2, 3, 4]
even = filter(lambda x: y % 2 == 0, num)
print(list(even))
解説
選択肢1が正解です。
無名関数lambdaに関する出題です。
lambdaは、defで関数を作成するほどではない小さな処理をする際に役立ちます。
構文は「lambda 引数 : 式」となり、式で使用した変数を引数に渡す必要があります。
問題文は式で使用した変数「y」を、引数「x」として渡しているため、「NameError: name 'y' is not defiend」とエラーになります。
正しい構文は「even = filter(lambda y: y % 2 == 0, num)」で、この場合は選択肢4の結果を得られます。
filter関数は「filter(関数, イテラブルオブジェクト)」と記述します。
第二引数で渡したイテラブルオブジェクト(num)を、第一引数の関数(lambda y: y % 2 == 0)に一つずつ渡して、Trueとなる要素だけのオブジェクトを作成します。
問題文の場合は、2で割った余りが0(偶数)の数値だけ抽出します。
問題文のコードは以下のリスト内包表記でも記述できます。
num = [1, 2, 3, 4]
even = [y for y in num if y % 2 == 0]
print(even)
(公式書籍 p.39)