セットとは
セット(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) を定義してください。