こんにちは、機械学習の講師をしている木下です!
今まで Python を使ったコーディングをしている際に、以下のような記載を見たことがありませんか?
lambda i: i + 1
この lambda という謎の文字は一体何なのか、どのようなことを意味するのか悩んでしまった方も多いと思います。
ここでは、そんな lambda (ラムダ式、無名関数)について初学者向けに解説していきます。
DX を推進する AI ・データサイエンス人材育成コース
プログラミング未経験から、AI やデータサイエンスを学ぶことのできる 6 ヶ月間のコースです。転職実績も豊富で、自走できる AI人材を多く輩出しています。
実行環境
- Google Colaboratory
- Python:3.9.2
そもそもいつ使うのか?
lambda は単体で使うのではなく他の関数と組み合わせて使うことを前提とした関数の定義文です。普段 def を使って定義している関数をより簡潔に記述することができます!
def による関数の定義は以下の記事を御覧ください。
以下のような関数・メソッドと共に用いることが多いので、これらを見かけたら活用を考えてみてください。
- sort (sorted)
- max (min)
- map
- filter
- optuna などの最適化ライブラリ
ただし、慣れないうちは非常に難しく感じる書き方なので、ここで一緒に押さえて活用できるようにしていきましょう!
lambda はリストの内包表記と共通した部分がありますので、そちらもぜひご覧ください。
lambda の書き方と簡単な書き換え方法
ここで、以下のような def
による関数の記述を lambda で書き換える方法を見ていきましょう。
def
による関数の記述a = 引数を用いた処理
return a
このような一般的な関数の定義は、lambda を用いると以下のように一行で書き換えることができます。
lambda
による関数の記述実は return する変数を計算している式を :
の後ろに持ってくるだけです!
lambda を使った書き換えの具体例
ここでは 実際に 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)}')
慣れないうちは以下の手順で書いてみると簡単にかけるようになります。
- def を使って関数を書いてみる
- return する変数を一行で表現する
- lambda の
:
の右側にその一行をもってくる
lambda の活用
先に述べたように lambda は決められた組み合わせで活用されます。例えば次のような sorted 文で用いる理由を考えてみましょう。
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 の組み合わせ
既存のリストから特定の条件に一致する要素だけを抽出したい場合、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 の組み合わせ
全ての要素に何らかの操作を適用して新しいリストを作りたい場合、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 を用いた記述を解説しました。
やはり、非常に難しく感じますが、意外と見かけることが多い表現なので、ぜひこの記事を読んで理解を深めてください。
以下、まとめになります。
- lambda は def による関数の定義を一行にまとめることができる構文
- 基本的には他の関数・メソッドなどと組み合わせて用いる
- def の代わりにそのまま使うことは推奨されていない
もし忘れてしまったら本記事を思い出して再度復習してみてください。
以上、Python 学習している方々のお力添えになれば幸いです!
最速で学びたい方:キカガクの長期コースがおすすめ
続々と転職・キャリアアップに成功中!受講生ファーストのサポートが人気のポイントです!
AI・機械学習・データサイエンスといえばキカガク!
非常に需要が高まっている最先端スキルを「今のうちに」習得しませんか?
無料説明会を週 2 開催しています。毎月受講生の定員がございますので確認はお早めに!
- 国も企業も育成に力を入れている先端 IT 人材とは
- キカガクの研修実績
- 長期コースでの学び方、できるようになること
- 料金・給付金について
- 質疑応答
まずは無料で学びたい方: Python&機械学習入門コースがおすすめ
AI・機械学習を学び始めるならまずはここから!経産省の Web サイトでも紹介されているわかりやすいと評判の Python&機械学習入門コースが無料で受けられます!
さらにステップアップした脱ブラックボックスコースや、IT パスポートをはじめとした資格取得を目指すコースもなんと無料です!
参考リンク
DX を推進する AI ・データサイエンス人材育成コース
プログラミング未経験から、AI やデータサイエンスを学ぶことのできる 6 ヶ月間のコースです。転職実績も豊富で、自走できる AI人材を多く輩出しています。