付録

セット (set)

セットの集合演算ABA&BA | B 和集合A & B 積集合A - B 差集合

セットとは

セット(set)は、重複のない要素の集合を表すデータ型です。数学の集合と同じ概念です。{} で作ります(辞書と似ているので注意)。

python
# セットの作成s = {1, 2, 3, 4, 5}type(s)   # <class 'set'># リストからセットを作成(重複が除去される)lst = [1, 2, 2, 3, 3, 3, 4]s = set(lst)s   # {1, 2, 3, 4}# 空のセット({}ではなく set() を使う)empty_set = set()   # {} は辞書なので注意!

セットの基本操作

python
s = {1, 2, 3, 4, 5}# 要素の追加s.add(6)       # {1, 2, 3, 4, 5, 6}s.add(3)       # すでにある要素は無視# 要素の削除s.remove(6)    # 存在しない場合はKeyErrors.discard(10)  # 存在しない場合も無視(エラーにならない)s.pop()        # ランダムに1つ取り出して削除# 要素の確認3 in s    # True10 in s   # False# 長さlen(s)    # 5

集合演算

セット同士で数学的な集合演算が使えます。

python
A = {1, 2, 3, 4, 5}B = {3, 4, 5, 6, 7}# 和集合(AまたはBに含まれる要素)A | B          # {1, 2, 3, 4, 5, 6, 7}A.union(B)     # 同上# 積集合(AとBの両方に含まれる要素)A & B          # {3, 4, 5}A.intersection(B)# 差集合(Aに含まれるがBには含まれない要素)A - B          # {1, 2}A.difference(B)# 対称差(AまたはBの一方にのみ含まれる要素)A ^ B          # {1, 2, 6, 7}A.symmetric_difference(B)

集合の比較演算

python
A = {1, 2, 3}B = {1, 2, 3, 4, 5}C = {4, 5, 6}# 部分集合の確認A <= B      # True(AはBの部分集合)A < B       # True(AはBの真部分集合)B >= A      # True(BはAを含む)# 素集合(共通要素がない)A.isdisjoint(C)   # True

セットの活用例

python
# 重複の除去words = ["apple", "banana", "apple", "cherry", "banana"]unique_words = set(words)print(unique_words)   # {"apple", "banana", "cherry"}# 共通の友達を探すalice_friends = {"Bob", "Charlie", "Diana", "Eve"}bob_friends = {"Alice", "Charlie", "Frank", "Diana"}common = alice_friends & bob_friendsprint(common)   # {"Charlie", "Diana"}# どちらかの友達all_friends = alice_friends | bob_friendsprint(all_friends)# アリスだけの友達alice_only = alice_friends - bob_friendsprint(alice_only)   # {"Bob", "Eve"}

練習: アナグラム判定

基礎

2つの文字列がアナグラム(同じ文字を含む)かどうかを判定する関数 is_anagram(s1, s2) を定義してください。