Pythonには、複数のデータをまとめて扱うコレクション型として、リスト(list)やタプル(tuple)の他に**集合型(set)**があります。
set は、数学の「集合」の概念に基づいたデータ型で、以下の2つの非常に重要な特徴を持っています。
- 重複する要素を持たない: 同じ要素を複数追加しようとしても、自動的に一つにまとめられます。
- 順序を持たない: (厳密には、Python 3.7以降では挿入順序が保持されるようになりましたが、
setの本質的な機能は順序に依存しません。)
set は、リストから重複した要素を効率的に削除したり、要素の存在確認を高速に行ったり、あるいは和集合・積集合といった集合演算を行うために使用されます。
この記事では、set の基本的な作成方法について解説します。
1. {} (波括弧) を使った作成
set を作成する基本的な方法は、{}(波括弧)で要素を囲み、カンマ(,)で区切ることです。
# 波括弧でセットを作成
# "web" が重複している点に注目
tags = {"python", "django", "web", "api", "web"}
print(tags)
print(f"型: {type(tags)}")
実行結果:
{'api', 'python', 'django', 'web'}
型: <class 'set'>
(実行環境によって表示される順序は異なる場合があります。)
重複していた "web" が自動的に1つにまとめられ、set が作成されました。
2. set() コンストラクタによる作成(リストからの変換)
set が非常に役立つ一般的な使用例が、リストから重複する要素を削除することです。set() コンストラクタ(関数)にリストなどのイテラブル(反復可能オブジェクト)を渡すと、重複が除去された set に変換されます。
# 重複を含むユーザーIDのリスト
user_id_list = ["u001", "u002", "u001", "u003", "u002", "u001"]
print(f"元のリスト: {user_id_list}")
# set() を使ってリストをセットに変換し、重複を除去
unique_user_ids = set(user_id_list)
print(f"重複除去後 (set): {unique_user_ids}")
実行結果:
元のリスト: ['u001', 'u002', 'u001', 'u003', 'u002', 'u001']
重複除去後 (set): {'u002', 'u003', 'u001'}
もし重複除去後に再びリストとして扱いたい場合は、list(set(user_id_list)) のように変換します。
3. 空のセットの作成方法(重要)
set を作成する上で、最も重要な注意点です。
{}(波括弧)のみを記述して空の set を作成しようとすると、Pythonはこれを**空の辞書(dict)**として解釈します。
# これは空の「辞書」になる
empty_wrong = {}
print(f"{empty_wrong} の型: {type(empty_wrong)}")
実行結果:
{} の型: <class 'dict'>
空の set を作成する場合は、必ず set() コンストラクタを引数なしで呼び出す必要があります。
# 空のセットを作成する正しい方法
empty_correct = set()
print(f"{empty_correct} の型: {type(empty_correct)}")
実行結果:
set() の型: <class 'set'>
まとめ
setは「重複を許さない」「順序を持たない」データ型です。{"a", "b", "c"}のように{}で作成できます。set(list)を使うと、リストから重複した要素を簡単に除去できます。- 空の
setを作成する場合は、{}ではなくset()を使います。
