Pythonセット完全ガイド:作成、操作、セット演算
Pythonセット
Pythonのセットデータ型が如何にデータ重複除去とセットベース操作を簡素化するかを学びます。作成、変更、削除、必須セット演算まで網羅。
動画:Pythonのセット
セットは一意でイミュータブルなアイテムの順序なしコレクションです。セット自体はミュータブル(要素の追加・削除可能)ですが、個々の要素はハッシュ可能(数値、文字列、タプルなど)でなければなりません。
Pythonセットは和集合、積集合、差集合、対称差集合などの数学的セット演算をサポートし、データ重複除去、メンバーシップテスト、セット代数などのタスクに最適です。
Pythonセットの作成
中括弧または組み込みset()コンストラクタでセットを作成します。要素は任意のイミュータブル型ですが、リスト、辞書、他のセットなどミュータブル型は含められません。
# 例1: 異なるデータ型のセット
# 整数のセット
my_set = {1, 2, 3}
print(my_set)
# 混合データ型のセット
my_set = {1.0, 'Hello', (1, 2, 3)}
print(my_set)
出力
{1, 2, 3} {1.0, (1, 2, 3), 'Hello'}
重複値が自動的に除去され、イミュータブルなタプルが受け入れられることに注目してください。
# 重複除去
my_set = {1, 2, 3, 4, 3, 2}
print(my_set)
# リストからセット構築
my_set = set([1, 2, 3, 2])
print(my_set)
# ミュータブルアイテムを含めるとエラー
# my_set = {1, 2, [3, 4]} # TypeError: unhashable type: 'list'
出力
{1, 2, 3, 4} {1, 2, 3} Traceback (most recent call last): File "<string>", line 15, in <module> my_set = {1, 2, [3, 4]} TypeError: unhashable type: 'list'
空のセット作成にはset()コンストラクタが必要;{}は空の辞書になります。
# 空構造作成時のセットと辞書の区別
a = {}
print(type(a))
a = set()
print(type(a))
出力
<class 'dict'> <class 'set'>
Pythonでのセット変更
セットはミュータブルですが、順序がないためインデックスやスライシングはサポートしません。
単一要素追加はadd()、別イテラブルのマージはupdate()を使用。重複エントリは自動的に無視されます。
# 例: 要素追加
my_set = {1, 3}
print(my_set)
# セットへのインデックスアクセスはエラー
# my_set[0] # TypeError: 'set' object does not support indexing
# 単一要素追加
my_set.add(2)
print(my_set)
# リストから複数要素追加
my_set.update([2, 3, 4])
print(my_set)
# リストと別セットを結合
my_set.update([4, 5], {1, 6, 8})
print(my_set)
出力
{1, 3} {1, 2, 3} {1, 2, 3, 4} {1, 2, 3, 4, 5, 6, 8}
セットからの要素削除
discard()は要素が存在すれば削除、なければ何もしません。一方remove()は要素がない場合KeyErrorを発生させます。
# 例: discard vs remove
my_set = {1, 3, 4, 5, 6}
print(my_set)
my_set.discard(4)
print(my_set)
my_set.remove(6)
print(my_set)
my_set.discard(2)
print(my_set)
# 以下はKeyError
# my_set.remove(2)
出力
{1, 3, 4, 5, 6} {1, 3, 5, 6} {1, 3, 5} {1, 3, 5} Traceback (most recent call last): File "<string>", line 28, in <module> KeyError: 2
pop()は任意の要素を削除・返却、clear()はセットを完全に空にします。
# popとclearの例
my_set = set("HelloWorld")
print(my_set)
print(my_set.pop())
print(my_set)
my_set.clear()
print(my_set)
出力
{'H', 'l', 'r', 'W', 'o', 'd', 'e'} H {'r', 'W', 'o', 'd', 'e'} set()
Pythonセット演算
Pythonセットは古典的なセット代数をサポート:和集合、積集合、差集合、対称差集合。これらは演算子または専用メソッドで呼び出せます。
2つの例示セットを使用:
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
和集合

AとBの和集合はすべての異なる要素を結合します。
print(A | B)
出力
{1, 2, 3, 4, 5, 6, 7, 8}
積集合

積集合は両セットに共通する要素のみを返します。
print(A & B)
出力
{4, 5}
差集合

差集合A - BはAにあってBにない要素を列挙します。
print(A - B)
出力
{1, 2, 3}
対称差集合

対称差集合A ^ Bはどちらかのセットにのみ属する要素(両方に属さない要素)を返します。
print(A ^ B)
出力
{1, 2, 3, 6, 7, 8}
追加のセットメソッド
セットオブジェクトで利用可能なすべての組み込みメソッドのクイックリファレンス:
| メソッド | 説明 |
|---|---|
| add() | セットに要素を追加 |
| clear() | すべての要素を削除 |
| copy() | 浅いコピーを返す |
| difference() | 呼び出し側にあり他にな要素の新しいセットを返す |
| difference_update() | インプレースで差集合削除 |
| discard() | 要素があれば削除;なければエラーなし |
| intersection() | 共通要素の新しいセットを返す |
| intersection_update() | インプレースで積集合更新 |
| isdisjoint() | 共通要素がなければTrue |
| issubset() | 呼び出し側が他のセットの部分集合ならTrue |
| issuperset() | 呼び出し側が他のセットを完全に含むならTrue |
| pop() | 任意の要素を削除・返却;空ならKeyError |
| remove() | 要素を削除;なければKeyError |
| symmetric_difference() | 各セットに排他的な要素の新しいセットを返す |
| symmetric_difference_update() | インプレースで対称差集合更新 |
| union() | すべての一意な要素を含む新しいセットを返す |
| update() | 別イテラブルとのインプレース和集合 |
セットのメンバーシップテスト
inキーワードで要素存在を確認。
my_set = set("apple")
print('a' in my_set) # True
print('p' not in my_set) # False
出力
True False
セットのイテレーション
標準forループでセットをループ;順序は保証されません。
for letter in set("apple"):
print(letter)
セットで動作する組み込み関数
len()、max()、min()、sum()、all()、any()、sorted()などがセットでシームレスに動作。一般的なユーティリティ一覧:
| 関数 | 説明 |
|---|---|
| all() | すべての要素が真値(またはセットが空)ならTrue |
| any() | 少なくとも1要素が真値ならTrue |
| enumerate() | インデックス付きでイテレーション、デバッグに有用 |
| len() | 要素数 |
| max() | 最大要素 |
| min() | 最小要素 |
| sorted() | セットからソート済みリストを返す |
| sum() | 数値要素の合計 |
Python Frozenset
frozensetはセットのイミュータブルな対応物です。作成後は要素変更不可のためハッシュ可能で、辞書キーとして使用できます。
A = frozenset([1, 2, 3, 4])
B = frozenset([3, 4, 5, 6])
サポートされる操作は通常のセットと同様ですが、ミュータブルなメソッドは除きます。
print(A.isdisjoint(B))
print(A.difference(B))
print(A | B)
# 要素追加試行はAttributeError
# A.add(3) # AttributeError: 'frozenset' object has no attribute 'add'
Python
- Python データ型マスター: 実践ガイド
- Python 演算子完全マスター: 包括的ガイド
- Python pass文完全マスター: 実践ガイド
- Python 関数引数完全マスター: 位置引数・キーワード引数・デフォルト引数
- Python辞書完全ガイド:作成、操作、高度なテクニック
- Pythonイテレータ完全ガイド:仕組みと自作方法
- Pythonクロージャ解説:ネスト関数が変数を捕捉する仕組み
- Python datetimeマスター:日付・時刻・タイムゾーン実践ガイド
- Python 概要:高水準、読みやすい、インタラクティブ、オブジェクト指向
- Python 数値型完全ガイド:不変な数値データ型の理解と活用
- Python 文字列完全マスター:作成、アクセス、操作のすべて