🦔
Pythonの初心者レッスンーーPython集合(set)
シーリズの目次
Pythonの初心者レッスンをここにまとめています。
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