Python - 集合と演算

和集合

和集合 (合併、ユニオン) は | 演算子、または union()関数で取得できます。

s1 = {0, 1, 2}
s2 = {1, 2, 3}

s_union = s1 | s2
print(s_union)
# {0, 1, 2, 3}

s_union = s1.union(s2)
print(s_union)
# {0, 1, 2, 3}
和集合

union()関数には複数の引数を指定することもできます。

s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}

s_union = s1.union(s2, s3)
print(s_union)
# {0, 1, 2, 3, 4}
和集合

また、引数には set()で 変換できるリストやタプルなども指定できます。

s1 = {0, 1, 2}
s2 = {1, 2, 3}

s_union = s1.union(s2, [5, 6, 5, 7, 5])
print(s_union)
# {0, 1, 2, 3, 5, 6, 7}
和集合

差集合

差集合は - 演算子、または difference() 関数で取得できます。

s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}

s_difference = s1 - s2
print(s_difference)
# {0}

s_difference = s1.difference(s2)
print(s_difference)
# {0}

s_difference = s1.difference(s2, s3)
print(s_difference)
# {0}
積集合

積集合

積集合 (共通部分、交差、インターセクション)は、&演算子、または intersection() メソッドで取得できます。

s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}

s_intersection = s1 & s2
print(s_intersection)
# {1, 2}

s_intersection = s1.intersection(s2)
print(s_intersection)
# {1, 2}

s_intersection = s1.intersection(s2, s3)
print(s_intersection)
# {2}
差集合

対称差集合

対称差集合は ^ 演算子、または symmetric_difference() で取得できます。対称差集合は、論理演算における排他的論理和 (XOR) に相当します。

s1 = {0, 1, 2}
s2 = {1, 2, 3}

s_symmetric_difference = s1 ^ s2
print(s_symmetric_difference)
# {0, 3}

s_symmetric_difference = s1.symmetric_difference(s2)
print(s_symmetric_difference)
# {0, 3}
対称差集合

部分集合か判定する: issubset()

ある集合が別の集合の部分集合かを判定するには、<= 演算子、または issubset() 関数を使います。

s1 = {0, 1}
s2 = {0, 1, 2, 3}

print(s1 <= s2)
# True

print(s1.issubset(s2))
# True
部分集合か判定する

<= 演算子も issubset() 関数も、等価な集合に対して True を返します。

s1 = {0, 1}

print(s1 <= s1)
# True

print(s1.issubset(s1))
# True

print(s1 < s1)
# False
部分集合か判定する

上位集合か判定する: issuperset()

ある集合が別の集合の上位集合かを判定するには、>=演算子、または issuperset() を使います。

s1 = {0, 1}
s2 = {0, 1, 2, 3}

print(s2 >= s1)
# True

print(s2.issuperset(s1))
# True
上位集合か判定する

>= 演算子も issuperset() 関数も、等価な集合に対して True を返します。真上位集合であるかを判定するには、等価な集合に対して False を返す > 演算子を使います。

print(s1 >= s1)
# True

print(s1.issuperset(s1))
# True

print(s1 > s1)
# False
上位集合か判定する

互いに素か判定する: isdisjoint()

二つの集合が互いに素かを判定するには、isdisjoint() 関数を使います。

s1 = {0, 1}
s2 = {1, 2}
s3 = {2, 3}

print(s1.isdisjoint(s2))
# False

print(s1.isdisjoint(s3))
# True
上位集合か判定する

関連記事