
Table of Contents(目次)
部分集合・上位集合・素集合について
このレクチャーでは、部分集合(真部分集合)・上位集合(真上位集合)・素集合を解説します。
これらは、ある集合が別の集合を包含しているかどうかや、集合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で使う不等号(<
/ >
)は、値の大小ではなく、要素が含まれているかどうかを判断するための記号になります。
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