Pythonの集合は、一意な要素の順序付けられていないコレクションです。これは、重複した値が自動的に削除され、要素を追加する順序が、要素の保存や取得方法に影響を与えないことを意味します。集合は、frozenset
型を使用しない限り、デフォルトで変更可能です(可変です)。frozenset
型は不変です。
集合は、効率的なメンバシップテスト(要素が存在するかどうかをチェックすること)、リストから重複を削除すること、和集合、積集合、差集合などの集合演算を実行する必要があるタスクに特に役立ちます。
目次
1. 集合の作成
中括弧{}
またはset()
コンストラクタを使用して集合を作成できます。空集合は必ずset()
を使用して作成する必要があることに注意してください。{}
は空の辞書を作成します。
# 中括弧を使用
my_set = {1, 2, 3, 4, 5}
print(my_set) # 出力: {1, 2, 3, 4, 5}
# set()コンストラクタを使用
another_set = set([6, 7, 8, 8]) # 重複は自動的に削除されます
print(another_set) # 出力: {8, 6, 7}
empty_set = set()
print(empty_set) # 出力: set()
集合は順序付けられていないため、出力の順序が入力の順序と異なる場合があります。
2. 要素の追加と更新
単一の要素を追加するにはadd()
メソッドを、複数の要素を追加するにはupdate()
メソッドを使用します。
my_set = {1, 2, 3}
my_set.add(4)
print(my_set) # 出力: {1, 2, 3, 4}
my_set.update([5, 6, 7])
print(my_set) # 出力: {1, 2, 3, 4, 5, 6, 7}
my_set.update({8, 9}, (10,)) # 集合とタプルで更新
print(my_set) # 出力: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
3. 要素の削除
要素の削除にはいくつかのメソッドがあります。remove()
は、要素が見つからない場合にKeyError
を発生させますが、discard()
は発生させません。
my_set = {1, 2, 3, 4, 5}
my_set.remove(3) # 要素が見つからない場合、KeyErrorが発生します
print(my_set) # 出力: {1, 2, 4, 5}
my_set.discard(6) # 要素が見つからない場合でもエラーは発生しません
print(my_set) # 出力: {1, 2, 4, 5}
removed_element = my_set.pop() # 任意の要素を削除して返します
print(removed_element) # 出力: (ランダムな要素)
print(my_set)
my_set.clear() # すべての要素を削除します
print(my_set) # 出力: set()
4. 集合演算
集合は標準的な数学的集合演算をサポートしています。
set1 = {1, 2, 3}
set2 = {3, 4, 5}
# 和集合: 両方の集合の要素を組み合わせます
union_set = set1 | set2 # または set1.union(set2)
print(union_set) # 出力: {1, 2, 3, 4, 5}
# 積集合: 両方の集合に存在する要素
intersection_set = set1 & set2 # または set1.intersection(set2)
print(intersection_set) # 出力: {3}
# 差集合: set1 に存在するが set2 には存在しない要素
difference_set = set1 - set2 # または set1.difference(set2)
print(difference_set) # 出力: {1, 2}
# 対称差集合: set1 または set2 のいずれかに存在するが、両方に存在しない要素
symmetric_difference_set = set1 ^ set2 # または set1.symmetric_difference(set2)
print(symmetric_difference_set) # 出力: {1, 2, 4, 5}
5. 集合メソッド
Pythonは集合の操作のための多くの組み込みメソッドを提供しています。
my_set = {1, 2, 3, 4, 5}
print(my_set.issubset({1, 2, 3, 4, 5, 6})) # True
print(my_set.issuperset({1, 2})) # True
print(my_set.isdisjoint({6, 7, 8})) # True - 共通の要素はありません
print(my_set.copy()) # 集合の浅いコピーを作成します
6. その他の集合演算
基本的な演算に加えて、メンバシップの確認、長さの取得などができます。
my_set = {1, 2, 3}
print(1 in my_set) # 出力: True
print(4 not in my_set) # 出力: True
print(len(my_set)) # 出力: 3
7. 集合で使用できる組み込み関数
all()
、any()
、sum()
、min()
、max()
などの関数は集合で使用できます。
my_set = {1, 2, 3, 4, 5}
print(sum(my_set)) # 出力: 15
print(min(my_set)) # 出力: 1
print(max(my_set)) # 出力: 5
print(all(x > 0 for x in my_set)) # 出力: True
print(any(x == 0 for x in my_set)) # 出力: False
8. フローズンセット
frozenset
は不変の集合を作成します。一度作成されると、要素を追加したり削除したりすることはできません。辞書のキーや他の集合の要素として役立ちます。
my_frozenset = frozenset({1, 2, 3})
# my_frozenset.add(4) # AttributeErrorが発生します
print(my_frozenset) # 出力: frozenset({1, 2, 3})