🦔

Pythonの初心者レッスンーーPython集合(set)

2024/06/19に公開

シーリズの目次

Pythonの初心者レッスンをここにまとめています。
https://zenn.dev/datasciencekun/articles/319e0f4b4021c5

Pythonの集合(set)は、ユニークな要素の無序コレクションを表します。集合は重複を許さず、順序を保持しません。集合は数学的な集合論に基づく操作(和、積、差など)が可能で、リストやタプルと同様に便利なデータ型です。

集合の作成

集合を作成するには、set() コンストラクタを使うか、中括弧 {} を使います。ただし、空の集合を作成するには、set() を使用しなければなりません({} は空の辞書を作成します)。

# 空の集合
empty_set = set()

# 要素を持つ集合
fruits = {"apple", "banana", "cherry"}

# リストやタプルから集合を作成
numbers = set([1, 2, 3, 4, 5])
letters = set(("a", "b", "c", "d", "e"))

print(empty_set)  # set()
print(fruits)     # {'apple', 'banana', 'cherry'}
print(numbers)    # {1, 2, 3, 4, 5}
print(letters)    # {'a', 'b', 'c', 'd', 'e'}

# 集合の演算
a = set('abracadabra') # {'a', 'r', 'b', 'c', 'd'}
b = set('alacazam') # {'a', 'c', 'l', 'm', 'z'}
a - b # {'r', 'd', 'b'}
a | b  # {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
a & b  # {'a', 'c'}
a ^ b   # {'r', 'd', 'b', 'm', 'z', 'l'}

集合の操作

要素の追加と削除

fruits = {"apple", "banana", "cherry"}

# 要素の追加
fruits.add("orange")
print(fruits)  # {'apple', 'banana', 'cherry', 'orange'}

# 要素の削除
fruits.remove("banana")
print(fruits)  # {'apple', 'cherry', 'orange'}

# 存在しない要素を削除しようとするとKeyErrorが発生
# fruits.remove("banana")  # KeyError: 'banana'

# discard()メソッドは存在しない要素を削除しようとしてもエラーにならない
fruits.discard("banana")

# 任意の要素を削除して返す
fruit = fruits.pop()
print(fruit)  # 例: 'apple'
print(fruits)  # {'cherry', 'orange'}

集合の結合・共通部分・差

set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}

# 和集合
union_set = set1.union(set2)
print(union_set)  # {1, 2, 3, 4, 5, 6}

# 積集合
intersection_set = set1.intersection(set2)
print(intersection_set)  # {3, 4}

# 差集合
difference_set = set1.difference(set2)
print(difference_set)  # {1, 2}

# 対称差集合(どちらか一方にのみ存在する要素)
symmetric_difference_set = set1.symmetric_difference(set2)
print(symmetric_difference_set)  # {1, 2, 5, 6}

集合に関する関数

以下は、Pythonの集合(set)に関するすべてのメソッドをテーブルで示したものです。

メソッド 説明
set.add(elem) 集合に要素を追加します。 s.add(3)
set.clear() 集合から全ての要素を削除します。 s.clear()
set.copy() 集合の浅いコピーを返します。 s.copy()
set.difference(*others) 集合の差集合を返します。 s1.difference(s2, s3)
set.difference_update(*others) 差集合を求め、その結果で集合を更新します。 s1.difference_update(s2, s3)
set.discard(elem) 集合から要素を削除します。要素が存在しない場合は何もしません。 s.discard(3)
set.intersection(*others) 集合の積集合を返します。 s1.intersection(s2, s3)
set.intersection_update(*others) 積集合を求め、その結果で集合を更新します。 s1.intersection_update(s2, s3)
set.isdisjoint(other) 集合が他の集合と共通の要素を持たない場合にTrueを返します。 s1.isdisjoint(s2)
set.issubset(other) 集合が他の集合の部分集合である場合にTrueを返します。 s1.issubset(s2)
set.issuperset(other) 集合が他の集合の上位集合である場合にTrueを返します。 s1.issuperset(s2)
set.pop() 集合から任意の要素を削除して返します。集合が空の場合はKeyErrorを発生させます。 s.pop()
set.remove(elem) 集合から要素を削除します。要素が存在しない場合はKeyErrorを発生させます。 s.remove(3)
set.symmetric_difference(other) 集合の対称差集合を返します。 s1.symmetric_difference(s2)
set.symmetric_difference_update(other) 対称差集合を求め、その結果で集合を更新します。 s1.symmetric_difference_update(s2)
set.union(*others) 集合の和集合を返します。 s1.union(s2, s3)
set.update(*others) 他の集合やイテラブルから集合を更新します。 s1.update(s2, s3)

Discussion