sec02 - Pythonの集合関係|部分集合・上位集合・素集合をわかりやすく解説
スポンサーリンク

部分集合・上位集合・素集合について

このレクチャーでは、部分集合(真部分集合)・上位集合(上位集合)素集合を解説します。

これらは、ある集合が別の集合を包含しているかどうかや、集合A, Bの要素に共通の値が存在するかどうかを調べることができます。

部分集合(真部分集合)・上位集合(真上位集合)・素集合といった用語は覚えなくても大丈夫です。今回のレクチャーでは、用語ではなく、どういった条件でTrue, Falseになるのかを覚えていただければと思います。

Pythonで部分集合・真部分集合を判定する方法 (<=, < 演算子)

集合Aが集合Bの部分集合である場合、Aのすべての要素は集合Bの要素でもある。(中略) AとBは等しい場合もあり、等しくない場合、AはBの真部分集合である。ある集合が別の集合の部分集合である関係は、包含と呼ばれる。

https://en.wikipedia.org/wiki/Subset

Pythonで部分集合(A<=B)の判定を行う時、集合Aの要素が集合Bの要素の一部であればTrueを返します。これは"A=B"、つまり全ての要素が合致する時も含まれます。

真部分集合(A<B)も部分集合と考え方同じですが、全ての要素が合致する時はFalseと評価されます。

setで使う時の不等号

setで使う不等号(< / >)は、値の大小ではなく、要素が含まれているかどうかを判断するための記号になります。

A < Bの場合、『BはAの持つ要素に加えて、他の要素も持っている状態』であればTrueになります。

A > Bの場合は、『AはBの持つ要素に加えて、他の要素も持っている状態』であればTrueになります。

部分集合がTrueになる条件は、次のようなケースです。

B = {1, 2, 3}  # 集合Bを比較対象として使用

A = {1, 2, 3}  # 部分集合は全ての要素がマッチした時もTrueになる
print(A <= B)

A = {1, 2}  # 次のsetもTrue: {2, 3}, {1, 3}
print(A <= B)

A = {1}  # 次のsetもTrue: {2}, {3}
print(A <= B)

A = set()  # Aが空集合の時もTrueになる
print(A <= B)

部分集合がFalseになる条件は、次のようなケースです。

B = {1, 2, 3}  # 集合Bを比較対象として使用

A = {9}  # Bに含まれない要素を持っているとFalseになる
print(A <= B)

A = {1, 9}  # Bに含まれない要素を持っているとFalseになる
print(A <= B)

真部分集合の場合、全ての要素が合致する時はFalseになりますが、それ以外は部分集合と同じ結果になります。

B = {1, 2, 3}  # 集合Bを比較対象として使用

A = {1, 2, 3}  # 真部分集合は、全ての要素がマッチした時はFalse
print(A < B)   # False

A = {1, 2}    # 次のsetもTrue: {2, 3}, {1, 3}
print(A < B)  # True

A = {1}       # 次のsetもTrue: {2}, {3}
print(A < B)  # True

A = set()     # Aが空集合の時もTrueになる
print(A < B)  # True

A = {9}       # Bに含まれない要素を持っているとFalseになる
print(A < B)  # False

A = {1, 9}    # Bに含まれない要素を持っているとFalseになる
print(A < B)  # False
スポンサーリンク

Pythonで上位集合・真上位集合を判定する方法 (>=, > 演算子)

上位集合は、部分集合のAとBの説明が逆になったものと理解すれば問題ありません。Pythonでは不等号の向きが逆になります。

Pythonで上位集合(A>=B)の判定を行う時、集合Bの要素が集合Aの要素の一部であればTrueを返します。これは"A=B"、つまり全ての要素が合致する時も含まれます。

真上位集合(A>B)も上位集合と考え方同じですが、全ての要素が合致する時はFalseと評価されます。

上位集合がTrueになる条件は、次のようなケースです。

A = {1, 2, 3}  # 集合Aを比較対象として使用

B = {1, 2, 3}  # 上位集合は全ての要素がマッチした時もTrueになる
print(A >= B)

B = {1, 2}  # 次のsetもTrue: {2, 3}, {1, 3}
print(A >= B)

B = {1}  # 次のsetもTrue: {2}, {3}
print(A >= B)

B = set()  # Aが空集合の時もTrueになる
print(A >= B)

上位集合がFalseになる条件は、次のようなケースです。

A = {1, 2, 3}  # 集合Aを比較対象として使用

B = {9}  # Bに含まれない要素を持っているとFalseになる
print(A >= B)

B = {1, 9}  # Bに含まれない要素を持っているとFalseになる
print(A >= B)

真上位集合の場合、全ての要素が合致する時はFalseになりますが、それ以外は上位集合と同じ結果になります。

A = {1, 2, 3}  # 集合Aを比較対象として使用

B = {1, 2, 3}  # 真上位集合は、全ての要素がマッチした時はFalse
print(A > B)   # False

B = {1, 2}    # 次のsetもTrue: {2, 3}, {1, 3}
print(A > B)  # True

B = {1}       # 次のsetもTrue: {2}, {3}
print(A > B)  # True

B = set()     # Aが空集合の時もTrueになる
print(A > B)  # True

B = {9}       # Bに含まれない要素を持っているとFalseになる
print(A > B)  # False

B = {1, 9}    # Bに含まれない要素を持っているとFalseになる
print(A > B)  # False

Pythonで素集合(Disjoint sets)を判定する方法【isdisjoint()】

素集合(互いに素な集合, Disjoint sets)とは、互いに要素の交わりを持たない状態の集合のことをいいます。

Pythonでは素集合の演算子が用意されていないので、isdisjoint()メソッドを使用します。

A = {1, 2}
B = {3, 4}

result = A.isdisjoint(B)
print("Disjoint:", result)  # True

1つでも共通の要素が存在していると、Falseになります。

A = {1, 2, 3}
B = {3, 4}
result = A.isdisjoint(B)
print("Disjoint:", result)  # False
スポンサーリンク