Pythonで複数のリストの共通・非共通要素とその個数を取得する方法


 

Pythonでデータ分析やプログラミングを行う際、複数のリスト間で共通する要素(積集合)や共通しない要素(差集合、対称差)を見つけ出し、さらにその個数を把握したい場面は頻繁にあります。この記事では、Pythonの強力なデータ構造や関数を活用して、これらの操作を効率的に行う方法を、簡潔なサンプルコードとともに解説します。


 

複数のリストの要素を比較する場面とは?

 

複数のリスト間で共通点や相違点を特定する操作は、様々なデータ処理で役立ちます。例えば:

  • 複数の顧客リストで、重複して登録されている顧客を見つけたい。

  • あるプロジェクトの参加者リストから、別のプロジェクトには参加していないメンバーを抽出したい。

  • 2つの試験の合格者リストを比較して、両方に合格した人と、どちらか一方にしか合格しなかった人を知りたい。

これらの状況では、リストの積集合、差集合、対称差といった概念が重要になります。


 

Pythonで共通する要素(積集合)とその個数を取得

 

複数のリストに共通して存在する要素を見つけるには、主にset(集合)型を使用します。

 

1. setintersection()メソッドを使う方法(推奨)

 

Pythonのset型は、数学的な集合演算をサポートしており、積集合(共通部分)を求めるのに最適です。

Python
 
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
list3 = [3, 5, 7, 9, 10]

# 各リストをsetに変換
set1 = set(list1)
set2 = set(list2)
set3 = set(list3)

# 共通する要素を取得
common_elements = set1.intersection(set2, set3)

print(f"共通する要素: {list(common_elements)}")
# 出力: 共通する要素: [5]

print(f"共通する要素の個数: {len(common_elements)}")
# 出力: 共通する要素の個数: 1

intersection()メソッドは複数のsetを引数に取ることができ、すべてのsetに共通する要素を返します。結果はsetになるため、必要に応じてlist()でリストに変換します。


 

Pythonで共通しない要素(差集合・対称差)とその個数を取得

 

次に、複数のリスト間で共通しない要素を特定する方法を見ていきましょう。

 

1. setdifference()メソッドを使う方法(差集合)

 

差集合は、あるsetに含まれるが、別のsetには含まれない要素を求めます。

Python
 
list_a = [1, 2, 3, 4, 5]
list_b = [4, 5, 6, 7, 8]

set_a = set(list_a)
set_b = set(list_b)

# list_a には存在するが list_b には存在しない要素
diff_a_b = set_a.difference(set_b)
print(f"list_a にのみ存在する要素: {list(diff_a_b)}")
# 出力: list_a にのみ存在する要素: [1, 2, 3]

print(f"list_a にのみ存在する要素の個数: {len(diff_a_b)}")
# 出力: list_a にのみ存在する要素の個数: 3

# list_b には存在するが list_a には存在しない要素
diff_b_a = set_b.difference(set_a)
print(f"list_b にのみ存在する要素: {list(diff_b_a)}")
# 出力: list_b にのみ存在する要素: [6, 7, 8]

print(f"list_b にのみ存在する要素の個数: {len(diff_b_a)}")
# 出力: list_b にのみ存在する要素の個数: 3

 

2. setsymmetric_difference()メソッドを使う方法(対称差)

 

対称差は、2つのsetのどちらか一方にのみ存在する要素(両方に共通する要素を除くすべての要素)を求めます。

Python
 
list_x = [1, 2, 3, 4]
list_y = [3, 4, 5, 6]

set_x = set(list_x)
set_y = set(list_y)

# どちらか一方にのみ存在する要素
symmetric_diff_elements = set_x.symmetric_difference(set_y)

print(f"どちらか一方にのみ存在する要素: {list(symmetric_diff_elements)}")
# 出力: どちらか一方にのみ存在する要素: [1, 2, 5, 6]

print(f"どちらか一方にのみ存在する要素の個数: {len(symmetric_diff_elements)}")
# 出力: どちらか一方にのみ存在する要素の個数: 4

 

まとめ

 

Pythonで複数のリストの要素を比較し、共通部分や相違点を見つけるには、set型が非常に強力なツールとなります。

  • 共通する要素(積集合):複数のリストをsetに変換し、intersection()メソッドを使用します。

  • 共通しない要素(差集合):2つのリストをsetに変換し、difference()メソッドを使用します。

  • どちらか一方にのみ存在する要素(対称差):2つのリストをsetに変換し、symmetric_difference()メソッドを使用します。

これらのset演算は、簡潔な記述高速に処理できるため、データ分析やリスト操作の場面で積極的に活用しましょう。

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座