[解決!Python]集合の要素を操作するには解決!Python

集合の要素数を調べたり、集合と集合の包含関係を調べたり、集合と集合から和/差/交差/対称差からなる新たな集合を得たりする方法を紹介する。

» 2023年05月09日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「解決!Python」のインデックス

連載目次

# sの要素数を調べる
s = {0, 1, 2, 3}
l = len(s)
print(l)  # 4

# sに要素xが含まれているかどうかを調べる
print(1 in s)  # True
print(5 in s)  # False

# sに要素xが含まれていないかかどうかを調べる x not in s
print(1 not in s)  # False
print(5 not in s)  # True

# s1とs2が同じ(要素のみを含んでいる)かどうかを調べる
s1, s2 = {0, 1, 2}, {0, 1, 2}
print(s1 == s2)  # True

# s1とs2が異なるかどうかを調べる
s1, s2 = {0, 1, 2}, {0, 1, 3}
print(s1 != s2)  # True

# s1とs2が互いに素かどうかを調べる
s1, s2 = {0, 1, 2}, {3, 4, 5}
print(s1.isdisjoint(s2))  # True

s1, s2 = {0, 1, 2}, {2, 3, 4}
print(s1.isdisjoint(s2))  # False

# どちらかの集合がもう一方の集合に包含されるかどうかを調べる
s1, s2 = {0, 1, 2, 3}, {0, 2}
print(s1.issubset(s2))  # False
print(s2.issubset(s1))  # True
print(s2 <= s1)  # True

s1, s2 = {0, 1, 2}, {0, 1, 2}
print(s1 <= s2)  # True

# s1がs2の真部分集合かどうかを調べる
s1, s2 = {0, 1, 2}, {0, 1, 2, 3}
print(s1 < s2)  # True

s1, s2 = {0, 1, 2}, {0, 1, 2}
print(s1 < s2)  # False

# どちらかの集合がもう一方の集合を包含するかどうかを調べる
s1, s2 = {0, 1, 2, 3}, {0, 1, 2}
print(s1.issuperset(s2))  # True
print(s2.issuperset(s1))  # False
print(s1 >= s2)  # True

s1, s2 = {0, 1, 2}, {0, 1, 2}
print(s1 >= s2)  # True

# s1がs2の真上位集合かどうかを調べる
s1, s2 = {0, 1, 2, 3}, {0, 1, 2}
print(s1 > s2)  # True

s1, s2 = {0, 1, 2}, {0, 1, 2}
print(s1 > s2)  # False

# s1とs2の和からなる集合を作成する
s1, s2 = {0, 1, 2}, {1, 2, 3}
result = s1.union(s2)
print(result)  # {0, 1, 2, 3}
print(s1)  # {0, 1, 2}

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

s3 = {3, 4, 5}
result = s1 | s2 | s3
print(result)  # {0, 1, 2, 3, 4, 5}

# s1とs2の差からなる集合を作成する
s1, s2 = {0, 1, 2, 3, 4, 5}, {1, 3, 5}
diff = s1.difference(s2)
print(diff)  # {0, 2, 4}

s1, s2 = {0, 1, 2, 3, 4, 5}, {0, 2, 4}
diff = s1 - s2
print(diff)  # {1, 3, 5}

# s1とs2の交差からなる集合を作成する
s1, s2 = {0, 1, 2, 3}, {2, 3, 4, 5}
intersection = s1.intersection(s2)
print(intersection)  # {2, 3}
intersection = s1 & s2
print(intersection)  # {2, 3}

# s1とs2の対象差からなる集合を作成する
s1, s2 = {0, 1, 2, 3, 4, 5}, {3, 4, 5, 6, 7, 8}
symdiff = s1.symmetric_difference(s2)
print(symdiff)  # {0, 1, 2, 6, 7, 8}

s1, s2 = {0, 1, 2, 3, 4, 5}, {4, 5, 6, 7, 8, 9}
symdiff = s1 ^ s2
print(symdiff)  # {0, 1, 2, 3, 6, 7, 8, 9}


集合に対する操作

 以下に集合で行える各種操作を一覧する。表中に出てくるs/s1/s2は全て何らかの要素を含んだ集合オブジェクトとする。

操作 メソッド/演算子
sの要素数を調べる len(s)
sに要素xが含まれているかどうかを調べる x in s
sに要素xが含まれていないかかどうかを調べる x not in s
s1とs2が同じ(要素のみを含んでいる)かどうかを調べる s1 == s2
s1とs2が異なるかどうかを調べる s1 != s2
s1とs2が互いに素かどうかを調べる s1.isdisjoint(s2)
s1がs2に包含されるかどうかを調べる s1.issubset(s2)
s1 <= s2
s1がs2の真部分集合かどうかを調べる s1 < s2
s1がs2を包含するかどうかを調べる s1.issuperset(s2)
s1 >= s2
s1がs2の真上位集合かどうかを調べる s1 > s2
s1とs2の和集合を作成する s1.union(s2)
s1 | s2
s1とs2の交差を作成する s1.intersection(s2)
s1 & s2
s1からs2の要素を削除した差集合を作成する s1.difference(s2)
s1 - s2
s1とs2の対象差集合を作成する s1.symmetric_difference(s2)
s1 ^ s2
集合に対する操作

 以下では、これらの操作を幾つかの分野に分けて見ていく。

基本

 リストなどの反復可能オブジェクトと同様に、集合の要素数はlen関数で調べられる。また、特定の要素が集合に含まれているか/含まれていないかはin演算子/not in演算子で調べられる。2つの集合が同じか(同じ要素だけを含んでいるか)どうかは==演算子や!=演算子で調べられる。

 以下に例を示す。

# sの要素数を調べる
s = {0, 1, 2, 3}
l = len(s)
print(l)  # 4

# sに要素xが含まれているかどうかを調べる
print(1 in s)  # True
print(5 in s)  # False

# sに要素xが含まれていないかかどうかを調べる x not in s
print(1 not in s)  # False
print(5 not in s)  # True

# s1とs2が同じ(要素のみを含んでいる)かどうかを調べる
s1, s2 = {0, 1, 2}, {0, 1, 2}
print(s1 == s2)  # True

# s1とs2が異なるかどうかを調べる
s1, s2 = {0, 1, 2}, {0, 1, 3}
print(s1 != s2)  # True


包含関係のチェック

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。