たころぐ

興味の向くままに

Python set(集合)の計算について

はじめに

集合 set の使用例を記載する

集合の計算式

計算 演算子 メソッド
和集合 | union
積集合 & intersection
差集合 - difference
排他的論理和集合 ^ symmetric_difference

1〜30までの整数のうち、2の倍数・3の倍数・5の倍数について考える

BEN図

f:id:tacoyaky:20210420214108p:plain

Python3 での計算

宣言

>>> duo = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30}   # 2の倍数   
>>> tri = {3, 6, 9, 12, 15, 18, 21, 24, 27, 30}  # 3の倍数
>>> penta = {5, 10, 15, 20, 25, 30}  # 5の倍数

和集合

>>> duo | tri  # duo.union(tri) も同様
{2, 3, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 26, 27, 28, 30}

>>> tri | penta  # tri.union(penta) も同様
{3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24, 25, 27, 30}

>>> duo | penta  # duo.union(penta) も同様
{2, 4, 5, 6, 8, 10, 12, 14, 15, 16, 18, 20, 22, 24, 25, 26, 28, 30}

>>> duo | tri | penta  # duo.union(tri).union(penta) も同様
{2, 3, 4, 5, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30}

積集合

>>> duo & tri  # duo.intersection(tri) も同様
{6, 12, 18, 24, 30}

>>> tri & penta  # tri.intersection(penta) も同様
{30, 15}

>>> duo & penta  # duo.intersection(penta) も同様
{10, 20, 30}

>>> duo & tri & penta    # duo.intersection(tri).intersection(penta) も同様
{30}

差集合

>>> duo - tri  # duo.difference(tri) も同様
{2, 4, 8, 10, 14, 16, 20, 22, 26, 28}

>>> duo - tri - penta  # duo.difference(tri).difference(penta) も同様
{2, 4, 8, 14, 16, 22, 26, 28}

>>> tri - duo  # tri.difference(duo) も同様
{3, 9, 15, 21, 27}

>>> tri- duo - penta  # tri.difference(duo).difference(penta) も同様
{27, 9, 3, 21}

>>> penta - duo  # penta.difference(duo) も同様
{25, 5, 15}

>>> penta - duo - tri  # penta.difference(duo).difference(tri) も同様
{25, 5}

排他的論理和集合

>>> duo ^ tri  # duo.symmetric_difference(tri) も同様
{2, 3, 4, 8, 9, 10, 14, 15, 16, 20, 21, 22, 26, 27, 28}

>>> tri ^ penta  # tri.symmetric_difference(penta) も同様
{3, 5, 6, 9, 10, 12, 18, 20, 21, 24, 25, 27}

>>> duo ^ penta  # duo.symmetric_difference(penta) も同様
{2, 4, 5, 6, 8, 12, 14, 15, 16, 18, 22, 24, 25, 26, 28}

>>> duo ^ tri ^ penta  # duo.symmetric_difference(tri).symmetric_difference(penta) も同様
{2, 3, 4, 5, 8, 9, 14, 16, 21, 22, 25, 26, 27, 28, 30}

感想

こんなに簡単に集合を扱えるなんてPython はすごいなと改めて感じました。