1. はじめに
Pythonにはリストや辞書と並んで「セット型(set型)」という便利なデータ構造があります。
集合(set)は数学の「集合」と同じように、重複しない要素の集まりを表現するのに使われます。
本記事では、Pythonのset型の特徴と基本操作について、初心者でも理解しやすいように丁寧に解説していきます。
この記事を読むことで、setの基本構文、よくある使い方、実務で役立つ応用例、さらには注意点まで一通り理解できます。
2. Pythonのセット(set)型とは?
2-1. set型の特徴と用途
Pythonのset型は、順序を持たず、重複しない要素の集合です。重複を自動的に排除するため、重複チェックや差分の取得、集合演算に非常に便利です。
2-2. setの基本的な作成方法
# setの作成(リストから変換)
fruits = set(["apple", "banana", "apple", "orange"])
print(fruits)
実行結果:
{'banana', 'apple', 'orange'}
重複していた”apple”が1つにまとめられているのがわかります。
2-3. 空のsetを作るときの注意
# 空のsetは set() を使う
empty_set = set()
print(type(empty_set)) # <class 'set'>
# {} は空の辞書になるので注意
not_set = {}
print(type(not_set)) # <class 'dict'>
3. よくある使い方・応用例
3-1. リストの重複を取り除く
リストに重複するデータがあるとき、set型に変換するだけで簡単に重複を除去できます。
# リストの重複削除
nums = [1, 2, 2, 3, 4, 4, 5]
unique_nums = list(set(nums))
print(unique_nums)
実行結果:
[1, 2, 3, 4, 5]
3-2. setを使った集合演算
set型は集合演算に強く、次のような操作ができます。
- 和集合(union)
- 積集合(intersection)
- 差集合(difference)
- 対称差(symmetric_difference)
a = set([1, 2, 3, 4])
b = set([3, 4, 5, 6])
print(a | b) # 和集合
print(a & b) # 積集合
print(a - b) # 差集合
print(a ^ b) # 対称差
実行結果:
{1, 2, 3, 4, 5, 6} {3, 4} {1, 2} {1, 2, 5, 6}
3-3. データの存在チェックにも便利
setはハッシュテーブルで管理されているため、検索が高速です。大量データからの検索処理に活用できます。
names = {"Alice", "Bob", "Charlie"}
print("Bob" in names) # True
print("David" in names) # False
4. 注意点・エラー対策
4-1. setは順序を持たない
setの要素は順番が保証されないため、インデックス指定はできません。
my_set = {"a", "b", "c"}
# print(my_set[0]) # エラー:'set' object is not subscriptable
4-2. ミュータブルな型(リストなど)は要素にできない
setの要素にはイミュータブル(変更不可)な型しか使えません。リストや辞書を要素にしようとするとエラーになります。
# リストをsetの要素にするとTypeError
invalid_set = set()
# invalid_set.add([1, 2]) # TypeError: unhashable type: 'list'
4-3. 同じ要素の追加は無視される
setに既に存在する要素を追加しても、重複しないため何も変化しません。
s = {"python", "java"}
s.add("python") # 重複なので変化なし
print(s)
実行結果:
{'java', 'python'}
5. まとめ
今回は、Pythonのset(セット)型の特徴と基本操作について解説しました。
- setは重複のない要素の集合を表す
- リストから重複を除去したいときに便利
- 和集合・積集合・差集合などの集合演算ができる
- 順序を持たない点に注意が必要
実務では「データの重複チェック」や「高速な存在判定」、「リスト同士の差分比較」などの場面で活用できます。
Python初心者の方は、まずリストとの違いを意識しながら使ってみるのがおすすめです。
今後は frozenset(変更不可のセット)も合わせて学ぶと、さらに理解が深まるでしょう。