
こんにちは、機械学習の講師をしている木下です!
今まで Python を使ったコーディングをしている際に、以下のような記載を見たことがありませんか?
lambda i: i + 1
この lambda という謎の文字は一体何なのか、どのようなことを意味するのか悩んでしまった方も多いと思います。
ここでは、そんな lambda (ラムダ式、無名関数)について初学者向けに解説していきます。
注意
本記事では理解を促進するため、一部非推奨な書き方を含みます。
目次
lambda は単体で使うのではなく他の関数と組み合わせて使うことを前提とした関数の定義文です。普段 def を使って定義している関数をより簡潔に記述することができます!
def による関数の定義は以下の記事を御覧ください。
以下のような関数・メソッドと共に用いることが多いので、これらを見かけたら活用を考えてみてください。
ただし、慣れないうちは非常に難しく感じる書き方なので、ここで一緒に押さえて活用できるようにしていきましょう!
lambda はリストの内包表記と共通した部分がありますので、そちらもぜひご覧ください。
ここで、以下のような def による関数の記述を lambda で書き換える方法を見ていきましょう。
def による関数の記述
def 関数名(引数1, 引数2, …):
a = 引数を用いた処理
return a
このような一般的な関数の定義は、lambda を用いると以下のように一行で書き換えることができます。
lambda による関数の記述
lambda 引数1, 引数2, …: 引数を用いた処理
実は return する変数を計算している式を : の後ろに持ってくるだけです!
ここでは 実際に lambda を使って関数を書き換えてみましょう。
サンプルコードは以下の通りです。
def add_def(a): a = a + 1 return a
# lambda を変数に代入することは推奨されていません add_lambda = lambda a: a + 1
# 実行すると 4 が返ってきます print(f'def: {add_def(3)}') print(f'lambda: {add_lambda(3)}')
慣れないうちは以下の手順で書いてみると簡単にかけるようになります。
先に述べたように lambda は決められた組み合わせで活用されます。例えば次のような sorted 文で用いる理由を考えてみましょう。
l = ['baseball', 'soccer', 'tennis', 'kickboxing'] l_sorted_first = sorted(l) print(l_sorted_first)
['baseball', 'kickboxing', 'soccer', 'tennis']
このように sorted は文字列などをアルファベット順に並び替えることに用います。それでは、なぜ lambda による記述が必要なのでしょうか?
例えば、1 文字目のアルファベット順ではなく、2 文字目のアルファベット順に並び替えたいといった特殊な処理のときに lambda が活きてくるんです!
以下のコードを御覧ください。
l = ['baseball', 'soccer', 'tennis', 'kickboxing'] # 2 文字目についてアルファベット順に並び替え l_sorted_second = sorted(l, key=lambda x:x[1]) print(l_sorted_second)
# 実行結果 ['baseball', 'tennis', 'kickboxing', 'soccer']
複雑に見えますが、ある単語の 2 文字目だけを取り出すための関数が lambda x:x[1] です。この関数を key という引数に取ることで、この関数の返り値に応じた値で並び替えを行うことができます。
このように、少し複雑な処理を関数やメソッドを用いて実行したい場合に lambda が真価を発揮することがあります。
既存のリストから特定の条件に一致する要素だけを抽出したい場合、filter()関数とlambda関数を組み合わせて使うことができます。
numbers = [1, 2, 3, 4, 5, 6] odd_numbers = list(filter(lambda x: x % 2 != 0, numbers)) print(odd_numbers)
[1, 3, 5]
この例ではlambda関数は数値が奇数であるかどうかを判定し、奇数だけを新しいリストに抽出します。
全ての要素に何らかの操作を適用して新しいリストを作りたい場合、map()関数とlambda関数を組み合わせて使うことができます。
numbers = [1, 2, 3, 4, 5] squared_numbers = list(map(lambda x: x ** 2, numbers)) print(squared_numbers)
[1, 4, 9, 16, 25]
この例では、lambda関数は数値を二乗する操作を行い、それを全ての要素に適用して新しいリストを作ります。
本記事では、Python の文法である lambda を用いた記述を解説しました。
やはり、非常に難しく感じますが、意外と見かけることが多い表現なので、ぜひこの記事を読んで理解を深めてください。
以下、まとめになります。
もし忘れてしまったら本記事を思い出して再度復習してみてください。
以上、Python 学習している方々のお力添えになれば幸いです!
.jpg&w=3840&q=75)
キカガクの長期コースはプログラミング経験ゼロの初学者が最先端技術を使いこなすAIエンジニアになるためのサポート体制が整っています!
実際に未経験からの転職・キャリアアップに続々と成功中です
まずは無料説明会で、キカガクのサポート体制を確認しにきてください!
説明会ではこんなことをお話します!
.png&w=3840&q=75)
AI・機械学習を学び始めるならまずはここから!経産省の Web サイトでも紹介されているわかりやすいと評判の Python&機械学習入門コースが無料で受けられます!
さらにステップアップした脱ブラックボックスコースや、IT パスポートをはじめとした資格取得を目指すコースもなんと無料です!
参考 | Python 3.9.2 ドキュメント
確認する参考 | Chainer チュートリアル
確認するSHARE
AI/データサイエンス学びはじめの方におすすめの記事
コース一覧
注目記事
新着記事