【Python】setでの集合演算
- setとは
- setの基本操作
- 和集合 (union)
- 積集合 (intersection)
- 差集合 (difference)
- 対称差 (symmetric difference)
- 部分集合と超集合
- 集合の比較
- 集合の応用例
setとは
Pythonの `set` は集合を表すデータ型で、重複しない要素を保持します。順序を持たず、要素の追加・削除・集合演算が高速に行えます。
# setの基本的な使い方
s = {1, 2, 3, 4}
print(s) # {1, 2, 3, 4}
# 重複した要素は自動的に削除される
s = {1, 2, 2, 3, 4}
print(s) # {1, 2, 3, 4}
setの基本操作
setの作成、追加、削除などの基本操作を紹介します。
# setの作成
s = set([1, 2, 3])
print(s) # {1, 2, 3}
# 要素の追加
s.add(4)
print(s) # {1, 2, 3, 4}
# 要素の削除
s.remove(2) # 存在しない要素を削除するとエラー
print(s) # {1, 3, 4}
# discardを使うとエラーなしで削除可能
s.discard(10) # 存在しなくてもエラーなし
和集合 (union)
和集合は2つの集合の要素をすべて含む集合を作成します。
A = {1, 2, 3}
B = {3, 4, 5}
# 方法1: | 演算子
print(A | B) # {1, 2, 3, 4, 5}
# 方法2: unionメソッド
print(A.union(B)) # {1, 2, 3, 4, 5}
積集合 (intersection)
積集合は2つの集合の共通する要素を持つ集合です。
A = {1, 2, 3}
B = {3, 4, 5}
# 方法1: & 演算子
print(A & B) # {3}
# 方法2: intersectionメソッド
print(A.intersection(B)) # {3}
差集合 (difference)
差集合は、ある集合から他の集合の要素を取り除いたものです。
A = {1, 2, 3}
B = {3, 4, 5}
# 方法1: - 演算子
print(A - B) # {1, 2}
# 方法2: differenceメソッド
print(A.difference(B)) # {1, 2}
対称差 (symmetric difference)
対称差は、2つの集合のうち片方にのみ存在する要素を持つ集合です。
A = {1, 2, 3}
B = {3, 4, 5}
# 方法1: ^ 演算子
print(A ^ B) # {1, 2, 4, 5}
# 方法2: symmetric_differenceメソッド
print(A.symmetric_difference(B)) # {1, 2, 4, 5}
部分集合と超集合
部分集合 (subset) は、ある集合のすべての要素を別の集合が含んでいる場合に成立します。
A = {1, 2}
B = {1, 2, 3}
# 部分集合の判定
print(A <= B) # True
print(A.issubset(B)) # True
# 超集合 (superset) の判定
print(B >= A) # True
print(B.issuperset(A)) # True
集合の比較
集合は比較演算子を用いて等しいかどうか判定できます。
A = {1, 2, 3}
B = {3, 2, 1}
print(A == B) # True (順序は関係ない)
print(A != {1, 2}) # True
集合の応用例
リストの重複を削除
numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = list(set(numbers))
print(unique_numbers) # [1, 2, 3, 4, 5]
共通する要素の抽出
list1 = ["apple", "banana", "cherry"]
list2 = ["banana", "cherry", "date"]
common_elements = set(list1) & set(list2)
print(common_elements) # {'banana', 'cherry'}
文字列の異なる文字をカウント
s = "hello world"
unique_chars = set(s)
print(unique_chars) # {'h', 'e', 'l', 'o', ' ', 'w', 'r', 'd'}