はじめに
Pythonのlambda式を自身がよく忘れてしまいがちなので, メモとして残しておきます.
他の方の参考にもなればと思います.
間違っている箇所もあると思いますので, コメントしていただけると幸いです.
Pythonはdef()で関数を定義しますが, lambda式で無名関数を定義することができます.
def() を用いた関数の場合、引数として直接他の関数に渡すことができず, 違う場所で定義してから値を渡す必要があるのに対して, lambda式は, あくまで「式」であるので, 関数の引数として直接渡すことができます!!!!
次の節から例を紹介していきます.
def文とlambda式の対応関係
def add(x, y=1):
return x+y
print(add(1,2))
# 3
print(add(100))
# 101
上記のdef文を, lambda式に変換した場合
f = lambda x, y=1: x+y
print(f(1,2))
# 3
print(f(100))
# 101
しかしながら, 上記のようにlambda式を変数に代入している記法は, PEP8では非推奨となっているので 注意してください
lambda式でif文処理
for文で一つ一つ処理する際に, if文の条件分岐が入るケースでもlambda式を活用することができます!
number_list = [1,2,3,4,5]
odd_number = []
for i in number_list:
if i % 2 == 0:
print(f"{i}は偶数である")
else:
print(f"{i}は奇数である")
odd_number.append(i)
print(odd_number)
# [1,3,5]
上記のfor文を, lambda式を使って書き直した場合
number_list = [1,2,3,4,5]
odd_number = filter(lambda i : i % 2 != 0, number_list)
print(list(odd_number))
# [1,3,5]
sorted関数
リストをソートする組み込み関数には引数keyがあります.
keyには, ソートの前にリストの各要素に適用される関数を指定します.
a = [[0,7,4], [2,5,6], [7,4,2]]
b = sorted(a)
print(b)
# [[0,7,4], [2,5,6], [7,4,2]]
上記のsorted関数で, lambda式を活用した場合
a = [[0,7,4], [2,5,6], [7,4,2]]
b = sorted(a, key=lambda x: x[-1])
print(b)
# [[7, 4, 2], [0, 7, 4], [2, 5, 6]]
map関数
リストの各要素に対して, 一定の処理を行った値を使用する場合はmap関数を適用します.
def doubler(x):
return x*2
L = [1, 2, 3, 4, 5, 6]
mod_list = map(doubler, L)
print(list(mod_list))
# [2, 4, 6, 8, 10, 12]
上記のmap関数で, lambda式を活用した場合
L = [1, 2, 3, 4, 5, 6]
doubler = map(lambda x: x*2, L)
print(list(doubler))
# [2, 4, 6, 8, 10, 12]
まとめ
今回はlambdaでの処理について記事にしました.
間違っている部分があった場合はコメントしていただけると幸いです.
今後もpython tipsを記事にしていこうと思います