【set】Pythonでの集合演算を扱う方法を解説

Python

本記事ではPythonでの集合演算を扱う方法を解説します。Pythonには組み込みのデータ型としてset型が用意されており、これを用いると簡単に集合演算を扱うことができます。

set型

set型は集合を表すデータ型で、重複しない要素を保持します。リストやタプルのように要素の順序は保証されませんが、高速な要素の追加・削除が可能です。

変換

リストやタプルをset型に変換する例です。

list_data = [1, 2, 2, 3]
set_data = set(list_data)
print(set_data)  # {1, 2, 3}

追加

set型に新しい要素を追加するにはadd()メソッドを使用します。すでにその要素が存在する場合は何も起こりません。

set_data.add(4)
print(set_data)  # {1, 2, 3, 4}

削除

set型から要素を削除するにはremove()メソッドを使用します。削除しようとする要素が存在しない場合はKeyErrorが発生します。

set_data.remove(2)
print(set_data)  # {1, 3, 4}

要素を含むか判定

setに特定の要素が含まれているかどうかを確認するには、in演算子とnot in演算子を使用します。

print(1 in set_data)    # True
print(2 in set_data)    # False
print(2 not in set_data)# True

和集合

2つの集合に含まれる要素をすべて合わせた集合です。|演算子またはunionメソッドを使って求められます。

構文

A|B
A.union(B)

set_a = {1, 2, 3}
set_b = {3, 4, 5}

result1 = set_a | set_b
print(result1)  # {1, 2, 3, 4, 5}

result2 = set_a.union(set_b)
print(result2)  # {1, 2, 3, 4, 5}

注意

union()は新しい集合を返すため、元の集合自体は変更されません。一方、update()は呼び出し元の集合に新たな要素を加えて更新するので、元の集合が破壊的変更を受けます。

# 非破壊的な操作
set_x = {1, 2, 3}
set_y = {3, 4, 5}
new_set = set_x.union(set_y)
print(set_x)    # 元の集合 {1, 2, 3} のまま
print(new_set)  # {1, 2, 3, 4, 5}

# 破壊的な操作
set_x = {1, 2, 3}
set_y = {3, 4, 5}
set_x.update(set_y)
print(set_x)  # {1, 2, 3, 4, 5} に変更されている

積集合

2つの集合で共通する要素からなる集合です。&演算子またはintersectionメソッドを用いて求められます。

構文

A&B
A.intersection(B)

set_a = {1, 2, 3}
set_b = {2, 3, 4}

result1 = set_a & set_b
print(result1)  # {2, 3}

result2 = set_a.intersection(set_b)
print(result2)  # {2, 3}

差集合

集合Aに含まれ、かつ集合Bには含まれない要素からなる集合です。-演算子またはdifferenceメソッドで求められます。

構文

A-B
A.difference(B)

set_a = {1, 2, 3, 4}
set_b = {3, 4, 5}

result1 = set_a - set_b
print(result1)  # {1, 2}

result2 = set_a.difference(set_b)
print(result2)  # {1, 2}

対称差集合

2つの集合のうち、片方にのみ含まれる要素からなる集合です。^演算子またはsymmetric_differenceメソッドを使って求められます。

構文

A^B
A.symmetric_difference(B)

set_a = {1, 2, 3}
set_b = {2, 3, 4}

result1 = set_a ^ set_b
print(result1)  # {1, 4}

result2 = set_a.symmetric_difference(set_b)
print(result2)  # {1, 4}

部分集合

集合Aが集合Bの部分集合かどうかを確認するときに用いられます。<=演算子またはissubsetメソッドで確認できます。

構文

A<=B
A.issubset(B)

set_a = {1, 2}
set_b = {1, 2, 3}

print(set_a <= set_b)         # True
print(set_a.issubset(set_b))  # True

上位集合

集合Aが集合Bの上位集合かどうかを確認するときに用いられます。>=演算子またはissupersetメソッドで確認できます。

構文

A>=B
A.issuperset(B)

set_a = {1, 2, 3}
set_b = {1, 2}

print(set_a >= set_b)           # True
print(set_a.issuperset(set_b))  # True

まとめ

Pythonには集合を表すset型が用意されており、和集合・積集合・差集合・対称差集合などの集合演算を簡単に記述できます。部分集合や上位集合の判定も演算子やメソッドで容易に行えます。要素の追加・削除の操作も高速で、重複を許さないデータ構造が必要な場面や、大量のデータを扱うときに非常に有用です。

タイトルとURLをコピーしました