Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで2つのリストの共通要素を求める方法:ラムダ式とfilter関数を使った実装例

この記事では、Pythonにおいてラムダ式filter関数を組み合わせて、2つの配列(リスト)の共通部分(積集合)を求める方法を解説します。

ここで扱う問題はシンプルです。「2つの配列が与えられたとき、両方に共通して含まれる要素をすべて見つけよ」というものです。集合演算のsetを使わずに、ラムダ式とfilter関数だけで実装する点がポイントになります。

アルゴリズムの流れ

処理の手順は以下の4ステップです。

  1. 2つの引数を受け取る共通部分(intersection)を求める関数を定義します。
  2. ラムダ式でインライン関数を作成し、filter関数と組み合わせることで、「その要素がもう片方のリストにも含まれているか」を判定しながら要素を選別します。
  3. 選別された共通要素を型変換(typecasting)によってリスト形式にまとめます。
  4. print文で結果を出力します。

実装例

それでは、実際のコードを見てみましょう。

def interSection(arr1, arr2):  # 共通要素を求める関数

    # filterメソッドとラムダ関数を使って一致する値を抽出
    values = list(filter(lambda x: x in arr1, arr2))
    print("Intersection of arr1 & arr2 is: ", values)

# ドライバープログラム
if __name__ == "__main__":
    arr1 = ['t','u','t','o','r','i','a','l']
    arr2 = ['p','o','i','n','t']
    interSection(arr1, arr2)

コードのポイント

  • lambda x: x in arr1 の部分で、「arr2の各要素xがarr1にも存在するか」を真偽値で判定しています。
  • filter()は判定がTrueになった要素だけを残すため、結果として両方のリストに含まれる要素のみが抽出されます。
  • list()で囲むことで、filterオブジェクトを通常のリストに変換しています。

実行結果

Intersection of arr1 & arr2 is: ['o', 'i', 't']

arr1(tutorial)とarr2(point)の両方に含まれる文字「o」「i」「t」が正しく抽出されていることがわかります。

補足:setを使った代替手法

なお、順序や重複を気にしない場合は、set(arr1) & set(arr2)のようにset型の積集合演算を使うともっと簡潔に書けます。ただし、本記事のようにラムダ式とfilter関数を使う方法は、条件付きの抽出処理を汎用的に記述できるため、より複雑なフィルタリングにも応用できる点がメリットです。

まとめ

この記事では、Pythonでラムダ式とfilter関数を組み合わせることで、2つの配列の共通部分を効率的に求める方法を学びました。filter(lambda x: x in arr1, arr2)という一行で要素の選別が完結するのは、Pythonらしい簡潔な書き方と言えるでしょう。ぜひ自分のコードでも活用してみてください。

  1. Pythonのintersection()関数とは?集合の共通要素(積集合)を求める方法

    この記事では、Pythonのセット(集合)に対して実行できるintersection()関数について詳しく解説します。数学における「積集合(インターセクション)」とは、2つの集合から共通する要素を見つけ出すことを指します。構文<セット名>.intersection(<セットa1>, <セットa2>, …)戻り値引数として渡されたすべての集合に共通する要素(積集合)が、新しいセットとして返されます。使用例set_1 = {t,u,t,o,r,i,a,l} set_2 = {p,o,i,n,t} set_3 = {t,u,t} # 2つの集合の積集合 print

  2. Pythonにおける「+=」と「=+」の違いとは?演算子の動作をわかりやすく解説

    Pythonには見た目がよく似ているのに、まったく異なる動作をする演算子が存在します。その代表例が「+=」と「=+」です。この2つは一見同じように見えますが、実際には意味も役割も大きく違います。本記事では、それぞれの動作の仕組みと具体的な使い方を詳しく解説します。 「+=」は複合代入演算子(in-place演算) +=は、Pythonでは複合代入演算子と呼ばれるもので、内部的には object.__iadd__() メソッドへのシンタックスシュガー(糖衣構文)です。 公式ドキュメントには次のように記載されています。 これらのメソッドは、拡張された算術代入(+=、-=、*=、@=、/=、//=