【6日でできるPython入門】組み込み型 集合

 集合(set型)は、Pythonの組み込み型のひとつで「重複しないデータの集まり」を表します。
リストや辞書ほど頻繁には使いませんが、「データの重複を排除したい」「数学的な集合演算(和・積・差)を使いたい」場面では非常に強力な道具になります。
ここでは、集合の基本操作から便利なメソッド、リストなど他の型との違いを詳しく解説します。

1.集合の基本

1.1. 集合の作成と特徴

集合は波括弧 { } で作成し、カンマ区切りで要素を並べます。
重複は自動的に排除されます。空の集合は set() を使います(空の {} は空辞書になるので注意)。

ファイル名: lesson10-1.py

# 集合の作成と基本操作

colors = {'赤', '青', '緑', '青'}
print("色の集合:", colors)

empty_set = set()
print("空の集合:", empty_set)

fruits_list = ['りんご', 'バナナ', 'りんご', 'みかん']
unique_fruits = set(fruits_list)
print("重複を除いた果物:", unique_fruits)

実行結果

色の集合: {'赤', '緑', '青'}
空の集合: set()
重複を除いた果物: {'バナナ', 'みかん', 'りんご'}
操作例内容
{'A', 'B', 'C'}集合(重複不可、順番保証なし)
set([リスト])リスト等から集合へ変換、重複を自動で排除
set()空集合の作成
{}空辞書になるので注意

1.2. 集合の要素追加・削除

集合にはadd()で要素を追加し、remove()で削除できます。

ファイル名: lesson10-2.py

# 集合への追加と削除
members = {'佐藤', '鈴木', '高橋'}
members.add('田中')
print("田中を追加:", members)

members.remove('佐藤')
print("佐藤を削除:", members)

実行結果

田中を追加: {'佐藤', '鈴木', '田中', '高橋'}
佐藤を削除: {'鈴木', '田中', '高橋'}
メソッド内容
add(value)要素を1つ追加s.add('新しい要素')
remove(value)要素を削除(なければエラー)s.remove('削除する要素')
discard(value)removeと同じ(なければ無視)s.discard('要素')
clear()全要素を削除s.clear()

2.集合の演算と使い方

2.1. 集合の数学的な演算(和・積・差・対称差)

集合は数学的な演算が可能です。
複数の集合間で共通項やすべての要素、片方にしかない要素などを簡単に求められます。

ファイル名: lesson10-3.py

# 集合の演算例
a = {'apple', 'banana', 'cherry'}
b = {'banana', 'cherry', 'date', 'fig'}

print("積集合(共通する果物):", a & b)
print("和集合(すべての果物):", a | b)
print("差集合(aにだけある果物):", a - b)
print("対称差集合(どちらか一方にだけある果物):", a ^ b)

実行結果

積集合(共通する果物): {'cherry', 'banana'}
和集合(すべての果物): {'cherry', 'banana', 'apple', 'fig', 'date'}
差集合(aにだけある果物): {'apple'}
対称差集合(どちらか一方にだけある果物): {'fig', 'date', 'apple'}
操作例内容メソッド記号
a & b積集合(共通部分)a.intersection(b)&
ab和集合(全要素の集合)a.union(b)
a - b差集合(aにだけある要素)a.difference(b)-
a ^ b対称差集合(片方だけにある要素)a.symmetric_difference(b)^

2.2. その他の主な集合メソッド

メソッド名概要
isdisjoint(other)互いに共通要素がなければTruea.isdisjoint(b)
issubset(other)自分がotherの部分集合ならTruea.issubset(b)
issuperset(other)自分がotherの上位集合ならTruea.issuperset(b)
copy()集合のコピーを作るa.copy()

このように集合型は「重複を除く」「集合演算でデータを比較・分析する」などの用途に最適です。
必要な場面で上手に使いこなして、Pythonでのデータ処理力をさらに高めていきましょう!