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

Pythonでネストされたリストの共通部分を求める2つの方法

この記事では、複数のリストを含む2つのリスト(ネストされたリスト)から共通部分を抽出する方法を、いくつかのアプローチに分けて解説します。まずは伝統的な方法から見ていきましょう。

方法1:リスト内包表記を使う

以下の手順で問題を解決します。

  • 複数のリストを含む2つのリストを初期化する
  • 1つ目のリストを反復処理し、現在の要素が2つ目のリストにも存在する場合に新しいリストへ追加する
  • 結果を出力する

サンプルコード

# リストの初期化
list_1 = [[1, 2], [3, 4], [5, 6]]
list_2 = [[3, 4]]

# 両方のリストに共通する要素を見つける
result = [sub_list for sub_list in list_1 if sub_list in list_2]

# 結果の出力
print(result)

上記のコードを実行すると、次のような結果が得られます。

実行結果

[[3, 4]]

リスト内包表記を使うことで、たった1行で共通部分を抽出できるのがポイントです。コードがシンプルで可読性が高いため、小規模なデータには最適な方法といえます。

方法2:set(集合)を使う

次に、setを使って2つのリストの共通部分を求める方法を紹介します。リストはそのままsetに格納できないため、一度タプルに変換する点に注意してください。以下の手順に従います。

  • map関数を使って、各サブリストをタプルに変換する
  • intersectionメソッドで2つの集合の共通部分(積集合)を求める
  • 結果をリスト形式に戻す
  • 結果を出力する

サンプルコード

# リストの初期化
list_1 = [[1, 2], [3, 4], [5, 6]]
list_2 = [[3, 4]]

# setで扱えるよう各サブリストをタプルに変換
tuple_1 = map(tuple, list_1)
tuple_2 = map(tuple, list_2)

# 共通部分(積集合)を求める
result = list(map(list, set(tuple_1).intersection(tuple_2)))

# 結果の出力
print(result)

こちらのコードも同様に、次の結果が出力されます。

実行結果

[[3, 4]]

それぞれの方法の使い分け

  • リスト内包表記: コードが直感的で分かりやすい反面、要素数が多い場合は計算量がO(n×m)に増えるため、大規模データでは処理が遅くなる可能性があります。
  • setを使う方法: 集合演算により高速に共通部分を求められます。大量のデータを扱う場合に有効ですが、リストからタプルへの変換処理が必要になります。

まとめ

この記事では、ネストされたリストから共通部分を抽出する2つの方法を紹介しました。データの規模や用途に応じて、シンプルなリスト内包表記か高速なset演算かを選択するとよいでしょう。記事の内容について質問がある場合は、コメント欄でお気軽にお尋ねください。

  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のリスト(List)について学びます。リストの作成方法、要素へのアクセス、要素の追加・削除、リスト自体の削除など、基本的な操作を一つずつ丁寧に解説していきます。 Pythonでは、リストは角括弧 [] を使って構築し、各要素はカンマ , で区切って記述します。 Pythonのリストは、異なる型のオブジェクトを混在させて格納できるのが特徴です。すべて文字列である必要も、整数である必要もありません。例えば、以下のように複数の型が混ざったリストを作成できます。mixedTypesList = [a, True, 1, 1.0] リストの作成方法 リストは、角括弧