セット: 重複なしコレクション

重複排除・高速検索・集合演算。

set
重複なし・順序なしのコレクション。
和集合
両方の要素を含む。
積集合
共通する要素のみ。

セットとは?

VIPクラブの招待リスト (VIP Guest List)

セットは「VIPクラブの招待リスト」です。最も重要なルールは「同じ名前は1つしか載らない(重複なし)」ことです。同じ人が2回来ても、リストには1回しか書かれません。また、リストの順番は関係ありません(順序なし)。「誰がいるか?」だけを管理します。

リストから重複を取り除きたいときや、「AにもBにもいる人(共通部分)」、「AにはいるけどBにはいない人(差分)」といった集合演算を行いたいときに最強のツールです。検索も辞書と同じく爆速(O(1))です。

Set Basics
# セットの作成
fruits = {"apple", "banana", "cherry"}
empty = set() # {} は辞書になる
# 追加・削除
fruits.add("date")
fruits.remove("banana") # なければ KeyError
fruits.discard("fig") # なければ何もしない
# 存在確認 O(1)
if "apple" in fruits:
print("Found!")
# リストから重複排除
unique = list(set([1, 2, 2, 3, 3, 3])) # [1, 2, 3]
Bad
# ❌ Bad: リストで重複チェック
if item not in my_list: # O(n)
my_list.append(item)
Good
# ✅ Good: セットで O(1)
my_set.add(item) # 重複は自動排除

集合演算

Union, Intersection, Difference
a = {1, 2, 3}
b = {2, 3, 4}
# 和集合
a | b # {1, 2, 3, 4}
a.union(b)
# 積集合
a & b # {2, 3}
a.intersection(b)
# 差集合
a - b # {1}
a.difference(b)
# 対称差(どちらか一方のみ)
a ^ b # {1, 4}
a.symmetric_difference(b)
# 部分集合チェック
{1, 2}.issubset({1, 2, 3}) # True
{1, 2, 3}.issuperset({1, 2}) # True
Tip: 演算子 (|, &, -) とメソッドは同じ結果。

合格ライン

セットで重複排除できる
和・積・差集合を使える

演習課題

課題1: 重複排除
セットを使ってリストの重複を排除してください。
課題2: 集合演算
和集合、積集合、差集合を計算してください。