カテゴリ: Python 更新日: 2026/07/06

Pythonでセット同士の演算(和集合・差集合・積集合)を行う方法 初心者向け完全ガイド

Pythonでセット同士の演算(和集合・差集合・積集合)を行う方法
Pythonでセット同士の演算(和集合・差集合・積集合)を行う方法

先生と生徒の会話形式で理解しよう

生徒

「Pythonのセットって重複を消せるのは知ってるんですが、セット同士を組み合わせたり、共通部分だけを取り出す方法はありますか?」

先生

「はい、それがまさにセット演算です。和集合・差集合・積集合という操作を使えば、データを簡単に整理したり比較できます。」

生徒

「和集合とか積集合って数学で聞いたことがあるような…」

先生

「そうです。中学校や高校の数学で習った集合の概念が、そのままPythonでも使えます。では、具体的な使い方を見ていきましょう。」

1. Pythonのセット演算とは?集合(set)の基本とメリット

1. Pythonのセット演算とは?集合(set)の基本とメリット
1. Pythonのセット演算とは?集合(set)の基本とメリット

Python(パイソン)の「セット(set)」は、数学で学ぶ「集合」と同じ考え方でデータを扱う仕組みです。最大の特徴は、リスト(list)とは違い、「同じ値を重複して持てない」ことと「順番を保持しない」ことです。

このセット同士を組み合わせる「セット演算」をマスターすると、大量のデータの中から特定の条件に合うものだけを瞬時に取り出すことができるようになります。プログラミング未経験の方でも、まずは「グループ同士の比較」とイメージすればOKです。

ここが便利!

例えば、ECサイトの「お気に入りリスト」を比較して、AさんとBさんの好みがどれくらい共通しているか(積集合)、あるいはAさんだけが気になっている商品はどれか(差集合)といった分析が、わずか1行のコードで実現できます。

まずは、セットがどのように重複を排除し、どのようなイメージで演算を行うのか、簡単な例で見てみましょう。


# 買い物リスト(重複あり)をセットに変換する例
fruits_list = ["りんご", "みかん", "りんご", "ぶどう"]
fruits_set = set(fruits_list)

# 自動で重複が消え、ユニークなデータだけが残ります
print(fruits_set)

このように、セットを使えば「データのダブり」を気にする必要がありません。この「きれいなデータの塊」同士を合体させたり、引き算したりするのが、これから解説する「和集合」「差集合」「積集合」といった便利な演算機能です。

2. 和集合(union)|2つのセットを統合する方法

2. 和集合(union)|2つのセットを統合する方法
2. 和集合(union)|2つのセットを統合する方法

和集合(union)とは、2つのセットに含まれるすべての要素を1つにまとめ、新しいセットを作る操作です。セットの最大の特徴である「重複を許さない」という性質により、両方のセットに共通して含まれている要素があっても、結果として出力されるのは1つだけになります。

Pythonで和集合を求めるには、記号の|(垂直棒:パイプライン)を使う方法と、union()メソッドを使う方法の2種類があります。どちらを使っても結果は同じですが、初心者の方は直感的に分かりやすい|から覚えるのがおすすめです。

和集合の具体的な使い方とサンプルコード

例えば、あなたが持っている果物のリストと、友達が持っている果物のリストを合体させて「全種類のメニュー」を作る場面をイメージしてみましょう。


# あなたが持っている果物
my_fruits = {"りんご", "みかん", "バナナ"}
# 友達が持っている果物(バナナが重複しています)
friend_fruits = {"バナナ", "もも", "パイナップル"}

# 方法1:記号「|」を使って和集合を作る
all_fruits_1 = my_fruits | friend_fruits
print(all_fruits_1)

# 方法2:union()メソッドを使って和集合を作る
all_fruits_2 = my_fruits.union(friend_fruits)
print(all_fruits_2)

実行結果は以下の通りです。両方に含まれていた「バナナ」が1つにまとめられ、すべての果物が揃った集合ができあがります。


{'パイナップル', 'もも', 'みかん', 'バナナ', 'りんご'}
{'パイナップル', 'もも', 'みかん', 'バナナ', 'りんご'}

※セットには「順序」がないため、実行するたびに表示される順番が変わることがありますが、中身のデータとしては正しく統合されているので安心してくださいね。

3. 差集合(difference):特定のグループから重複を除外する

3. 差集合(difference):特定のグループから重複を除外する
3. 差集合(difference):特定のグループから重複を除外する

Pythonのセット(set)における「差集合」とは、ある集合から別の集合に含まれる要素を差し引いた、残りの要素を取り出す操作です。簡単に言うと、「Aにはあるけれど、Bにはないもの」だけを抽出するイメージです。

例えば、「買い物リストA」から「すでにカゴに入れたリストB」を差し引いて、まだ買っていないものだけを確認したい時に非常に便利です。実務でも「特定の条件に当てはまらないデータ」を抽出する際によく使われます。

差集合の書き方:マイナス記号(-)かメソッドを使う

差集合を求めるには、算数のように-(マイナス記号)を使う方法と、difference()メソッドを使う方法の2種類があります。初心者のうちは、直感的で分かりやすい-記号を使うのがおすすめです。


# Aさんの好きなフルーツ
a_likes = {"りんご", "みかん", "バナナ"}
# Bさんの好きなフルーツ
b_likes = {"バナナ", "もも", "パイナップル"}

# Aさんだけが好きなもの(AからBと重なる部分を引く)
only_a = a_likes - b_likes
print(f"Aさんだけが好きなフルーツ: {only_a}")

# Bさんだけが好きなもの(BからAと重なる部分を引く)
only_b = b_likes.difference(a_likes)
print(f"Bさんだけが好きなフルーツ: {only_b}")

Aさんだけが好きなフルーツ: {'みかん', 'りんご'}
Bさんだけが好きなフルーツ: {'パイナップル', 'もも'}

ここがポイント!

差集合で注意したいのは、「どちらの集合から引くか」によって結果が変わるという点です。a - bは「aにしかないもの」を返し、b - aは「bにしかないもの」を返します。数学の引き算と同じように、順番を意識して使い分けましょう。

4. 積集合(intersection):共通する要素だけを見つける

4. 積集合(intersection):共通する要素だけを見つける
4. 積集合(intersection):共通する要素だけを見つける

プログラミングをしていると、「2つのグループの両方に含まれているデータだけを抜き出したい」という場面がよくあります。これを積集合(intersection:インターセクション)と呼びます。

例えば、「りんごが好きな人のリスト」と「バナナが好きな人のリスト」があったとき、両方の果物が好きな人(共通のメンバー)だけを探し出すイメージです。Pythonでは、記号の&(アンパサンド)を使うか、intersection()メソッドを使って簡単に計算できます。

ポイント: 未経験者の方は、数学の「共通部分」をイメージすると分かりやすいですよ。どちらか一方にしかないデータは捨てられ、両方に存在するデータだけが残ります。
[Image of intersection of two sets]

# Aさんの好きな果物
a_likes = {"りんご", "みかん", "バナナ"}
# Bさんの好きな果物
b_likes = {"バナナ", "もも", "パイナップル"}

# 2人とも好きな果物(共通点)を探す
common_fruits = a_likes & b_likes

print("共通の果物:", common_fruits)
# 別の書き方(メソッド形式)
print("共通の果物(メソッド版):", a_likes.intersection(b_likes))

実行結果は以下のようになります。両方のセットに含まれている「バナナ」だけが抽出されているのがわかりますね。


共通の果物: {'バナナ'}
共通の果物(メソッド版): {'バナナ'}

この機能は、顧客リストの重複チェックや、特定の条件を複数満たすユーザーを絞り込むときなど、実務でも非常に頻繁に活用される便利なテクニックです。

5. 対称差集合(symmetric_difference)の使い方

5. 対称差集合(symmetric_difference)の使い方
5. 対称差集合(symmetric_difference)の使い方

対称差集合(たいしょうさしゅうごう)とは、2つのグループを比較したときに「どちらか片方だけに存在する要素」を抜き出す操作です。 言い換えれば、「両方のグループに共通して含まれるもの(重複)だけを取り除く」というイメージです。

Pythonでは、記号の ^(キャレット)を使うか、symmetric_difference() メソッドを使用して計算します。 ベン図で考えると、中央の重なり部分以外をすべて取得するイメージなので、データの差分を視覚化したいときに非常に便利です。

[Image of symmetric difference venn diagram]

プログラミング未経験の方でも分かりやすいように、身近な買い物リストを例に見てみましょう。


# Aさんの買い物リスト
a_list = {"りんご", "みかん", "バナナ"}
# Bさんの買い物リスト
b_list = {"バナナ", "もも", "パイナップル"}

# どちらか片方だけが買おうとしている「珍しい果物」を抽出
diff_result = a_list ^ b_list

print(diff_result)

{'もも', 'りんご', 'パイナップル', 'みかん'}

実行結果を見ると、両方のリストに入っていた「バナナ」だけが消え、それ以外の果物がすべて表示されているのがわかります。 このように、「お互いに持っていないものだけをリストアップしたい」という場面で、対称差集合は非常に強力なツールになります。

6. 応用例:会員データの比較

6. 応用例:会員データの比較
6. 応用例:会員データの比較

例えば、オンラインサービスの会員データで「無料会員と有料会員の両方にいるユーザー」「無料会員だけのユーザー」「有料会員だけのユーザー」を調べる場合に集合演算が役立ちます。


free_users = {"佐藤", "鈴木", "高橋", "田中"}
paid_users = {"田中", "伊藤", "佐藤"}

# 共通ユーザー
print(free_users & paid_users)
# 無料会員だけ
print(free_users - paid_users)
# 有料会員だけ
print(paid_users - free_users)

{'佐藤', '田中'}
{'高橋', '鈴木'}
{'伊藤'}

7. 初心者が覚えるべきポイント

7. 初心者が覚えるべきポイント
7. 初心者が覚えるべきポイント
  • 和集合:すべての要素をまとめる(| または union()
  • 差集合:片方だけにある要素を取り出す(- または difference()
  • 積集合:両方に共通する要素だけ(& または intersection()
  • 対称差集合:どちらか一方だけにある要素(^ または symmetric_difference()

これらを使いこなすと、データの比較や整理が非常に簡単になります。特に大規模なデータ処理や検索機能の実装にも役立ちます。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
Python のセットの記事一覧へ
新着記事
New1
PHP
PHPのエラーハンドリングを完全ガイド!初心者でもわかるHTTPステータスコードの基礎と使い方
New2
PHP
PHPでファイルの存在確認・削除・移動を行う方法!初心者向けにfile_exists・unlink・renameを解説
New3
Python
Pythonでネットワークスキャナーを作る方法!Scapy入門ガイド(初心者向け)
New4
ChatGPT
ChatGPTでPythonのバグを見つける方法!初心者が確認すべきチェックポイント
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.2
Java&Spring記事人気No2
ChatGPT
ChatGPTでPythonコード作成とは?初心者向けに使い方・メリット・注意点を徹底解説
No.3
Java&Spring記事人気No3
Python
PythonでAPIリクエストを送信する方法を完全解説!requestsライブラリで簡単API通信
No.4
Java&Spring記事人気No4
Python
Pythonのrequestsライブラリ完全入門!HTTPリクエストの送り方を初心者向けにやさしく解説
No.5
Java&Spring記事人気No5
Python
Pythonのtimedeltaで日付の加算・減算をしよう!初心者でもわかる時間操作の基本
No.6
Java&Spring記事人気No6
Python
Pythonの非同期HTTPリクエスト(asyncio + aiohttp)完全ガイド!初心者でもわかるネットワークプログラミング
No.7
Java&Spring記事人気No7
PHP
PHPの変数の命名規則とベストプラクティスをやさしく解説!初心者向け完全ガイド
No.8
Java&Spring記事人気No8
Python
Pythonでzip圧縮・解凍する方法を徹底解説!初心者でもわかるzipfileモジュールの使い方