Python の lambda 式と for 文
Python のラムダ (lambda) 式を使うと、for 文を使って書くような繰り返し処理を、とても簡潔に書けるようになる場合があります。
具体例でみていきましょう。
例えば、 [1, 2, 3] というリスト L があるとします。 そこで「リスト L のそれぞれの要素に、 5 を足したリストを作りたい」とします。
どうすれば良いでしょうか。
for 文でループして、ひとつひとつの要素を処理する
ひとつ目の方法としては for 文を使い、リスト L のそれぞれの要素に対して 5 を足して、その結果を他のリストに保存していくという方法があります。
L = [1, 2, 3]
R = [] # 足し算の結果を入れるリスト
for m in L:
R.append(m + 5) # 5 を足した結果を追加
print(R) # [6, 7, 8]
これでも確かにできました。
しかし、もっと簡潔な方法があります。
map() 関数と def で定義した関数を組み合わせる
「元のリストのそれぞれの要素をあるルールに従って処理し、異なるリストを作り出す」という目的のために、 map() 関数があります。
map() 関数では、その「あるルール」は関数として書きます。 今回の場合、「受け取った引数に 5 を足して返す関数」を用意します。
その関数を map() 関数の第一引数に渡します。 すると、map 関数はリストのそれぞれの要素に 5 を足して返します。
def add_five(m):
return m + 5
L = [1, 2, 3]
R = map(add_five, [1, 2, 3])
print(list(R)) # [6, 7, 8]
map() 関数と lambda 式を組み合わせる
上で行ったことと同じ内容を、lambda 式を使ってもっと簡潔に書くことができます。
「ある値 i を受け取って、それに 5 を足した値を返す」という内容は、 lambda 式を使うと lambda i: i + 5 とかけます。
従って、全体のコードは次のようになります。
L = [1, 2, 3]
R = map(lambda i: i + 5, L)
print(list(R)) # [6, 7, 8]
このように、これまで for 文を使って、コレクションの要素毎にループしていたような処理は、 lambda (ラムダ) 式を使うと簡単に書ける場合があります。