1. ホーム
  2. 個人向けサービス
  3. キカガク技術ブログ
  4. 活用法も!Python の lambda (ラムダ式、無名関数)について解説!
2022年3月30日

活用法も!Python の lambda (ラムダ式、無名関数)について解説!

こんにちは、機械学習の講師をしている木下です!
今まで Python を使ったコーディングをしている際に、以下のような記載を見たことがありませんか?

lambda i: i + 1

この lambda という謎の文字は一体何なのか、どのようなことを意味するのか悩んでしまった方も多いと思います。
ここでは、そんな lambda (ラムダ式、無名関数)について初学者向けに解説していきます。

注意

本記事では理解を促進するため、一部非推奨な書き方を含みます。

実行環境

  • Google Colaboratory
  • Python:3.9.2

そもそもいつ使うのか?

lambda は単体で使うのではなく他の関数と組み合わせて使うことを前提とした関数の定義文です。普段 def を使って定義している関数をより簡潔に記述することができます!

def による関数の定義は以下の記事を御覧ください。

以下のような関数・メソッドと共に用いることが多いので、これらを見かけたら活用を考えてみてください。

  • sort (sorted)
  • max (min)
  • map
  • filter
  • optuna などの最適化ライブラリ

ただし、慣れないうちは非常に難しく感じる書き方なので、ここで一緒に押さえて活用できるようにしていきましょう!

lambda はリストの内包表記と共通した部分がありますので、そちらもぜひご覧ください。

lambda の書き方と簡単な書き換え方法

ここで、以下のような def による関数の記述を lambda で書き換える方法を見ていきましょう。

def による関数の記述

def 関数名(引数1, 引数2, …):
a = 引数を用いた処理
return a

このような一般的な関数の定義は、lambda を用いると以下のように一行で書き換えることができます

lambda による関数の記述

lambda 引数1, 引数2, …: 引数を用いた処理

実は 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)}')

慣れないうちは以下の手順で書いてみると簡単にかけるようになります。

  1. def を使って関数を書いてみる
  2. return する変数を一行で表現する
  3. 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 学習している方々のお力添えになれば幸いです!

最速で学びたい方:キカガクの長期コースがおすすめ

人材育成実績15万人以上

キカガクの長期コースはプログラミング経験ゼロの初学者が最先端技術を使いこなすAIエンジニアになるためのサポート体制が整っています!

実際に未経験からの転職・キャリアアップに続々と成功中です

まずは無料説明会で、キカガクのサポート体制を確認しにきてください!

説明会ではこんなことをお話します!

  • 国も企業も育成に力を入れている先端 IT 人材とは
  • キカガクの研修実績
  • 長期コースでの学び方、できるようになること
  • 料金・給付金について
  • 質疑応答

まずは無料で学びたい方: Python&機械学習入門コースがおすすめこちら

基礎を習得する Python速習 機械学習入門

AI・機械学習を学び始めるならまずはここから!経産省の Web サイトでも紹介されているわかりやすいと評判の Python&機械学習入門コースが無料で受けられます!
さらにステップアップした脱ブラックボックスコースや、IT パスポートをはじめとした資格取得を目指すコースもなんと無料です!

参考リンク

参考 | Python 3.9.2 ドキュメント

確認する

参考 | Chainer チュートリアル

確認する

SHARE




キカガクラーニング

AI/データサイエンス学びはじめの方におすすめの記事

未経験からAI人材 無料説明会に参加

未経験からAI人材 無料説明会に参加