Python の lambda 式と for 文

Python のラムダ (lambda) 式を使うと、for 文を使って書くような繰り返し処理を、とても簡潔に書けるようになる場合があります。

具体例でみていきましょう。

例えば、 [1, 2, 3] というリスト L があるとします。 そこで「リスト L のそれぞれの要素に、 5 を足したリストを作りたい」とします。

Python lambda with for

どうすれば良いでしょうか。

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 (ラムダ) 式を使うと簡単に書ける場合があります。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Python 入門