Python 集合

1つ1つの要素に順番はない

自習メモなので間違いなどあると思います。都度修正し間違いをなくしていきたいと思っています。

Pythonでは、集合の中に同じ要素が複数あると1つ残してその他は削除されるため、重複を削除したい場合は集合を使う。波カッコ{}を使う。辞書と違ってkeyとvalueの組み合わせはない。

順番が変わっているかと重複が削除されるか試す

s = {0, 2, 1, 1, 4, 3, 1}
print(s)

{0, 1, 2, 3, 4}
で帰ってきます。並び換えられて、重複しているものは1つに整理されていますね。

print(type(s))
で聞いてみると
と集合を表す set で帰ってきました。 #<class ‘set’>

リストのデータを集合に代入

a = [0, 2, 1, 1, 4, 3, 1]
s = set(a)
print(s)
と入力すると
{0, 1, 2, 3, 4}
で帰ってきます。
print(type(s))を入力すると set で帰ってきます。 #<class ‘set’>

要素の追加と削除

追加はaddを使います。
s = {1, 2, 3, 4}
s.add(5)
print(s)
結果
{1, 2, 3, 4, 5}
で帰ってきます。

削除はremoveを使います。
s = {1, 2, 3, 4}
s.remove(2)
print(s)
結果
{1, 3, 4}
で帰ってきます。

全部消すにはclearを使います。
s = {1, 2, 3, 4}
s.clear()
print(s)
結果
set()
で帰ってきます。

変更不可の集合作成

frozenset 関数を使用すると、要素の追加や削除ができない集合を作成できる。
先ずはaのリストを作成し、frozenset関数で代入
a = [0, 1, 8, 4, 3, 1]
s = frozenset(a)
print(s)
結果
frozenset({0, 1, 3, 4, 8})

これに add や clear を行ってもいずれもエラーが帰ってきます。
a = [0, 1, 8, 4, 3, 1]
s = frozenset(a)
s.add(2)
print(s)
結果エラー
AttributeError: ‘frozenset’ object has no attribute ‘add’

a = [0, 1, 8, 4, 3, 1]
s = frozenset(a)
s.clear()
print(s)
結果エラー
AttributeError: ‘frozenset’ object has no attribute ‘clear’

和集合

和集合とは、集合Aと集合Bでいずれかの集合で少なくとも一方に含まれる値。
A = {1, 2, 4} と B = {1, 3, 4, 5} がある場合の和集合は 1, 2, 3, 4, 5 である。

|(バーティカルライン)を使った和集合表示
A = {1, 2, 4}
B = {1, 3, 4, 5}
C = A | B
print(C)
結果
{1, 2, 3, 4, 5}

unionメソッドを使った和集合の表示
A = {1, 2, 4}
B = {1, 3, 4, 5}
D = A.union(B)
print(D)
結果
{1, 2, 3, 4, 5}

積集合

積集合とは、すべての集合に必ず含まれる集合のこと。
A = {1, 2, 4} と B = {1, 3, 4, 5} がある場合の和集合は 1, 4 である。

&(アンパサンド)やintersectionメソッドを使用します。

&(アンパサンド)の場合
A = {1, 2, 4}
B = {1, 3, 4, 5}
C = {1, 4, 8, 9}
D = A & B & C
print(D)
結果
{1, 4}

intersectionメソッドの場合
E = A.intersection(B, C)
print(E)
結果
{1, 4}

差集合

差集合とは、集合Aには含まれるが、集合Bには含まれない要素のこと。
A = {1, 2, 4} と B = {1, 3, 4, 5} がある場合の和集合は 2 である。

-(マイナス)やdifferenceメソッドを使用します。
A = {1, 2, 4}
B = {1, 3, 4, 5}
C = A – B
print(C)
結果
{2}

differenceを使用
A = {1, 2, 4}
B = {1, 3, 4, 5}
C = A.difference(B)
print(C)
結果
{2}

対象差集合

2つの集合のうち、どちらか一方にだけ含まれる要素の集合のこと。
A = {1, 2, 4} と B = {1, 3, 4, 5} がある場合の和集合は 2, 3, 5 である。
ハット(^)やsymmetric_differenceメソッドを使用。

ハット(^)
A = {1, 2, 4}
B = {1, 3, 4, 5}
C = A ^ B
print(C)
結果
{2, 3, 5}

symmetric_differenceの場合
A = {1, 2, 4}
B = {1, 3, 4, 5}
C = A.symmetric_difference(B)
print(C)
結果
{2, 3, 5}

集合の関係

部分集合。BはAの中に含まれている集合か否かを知る方法です。( True かFalesで結果表示される)
<=(小なりイコール)またはissubsetメソッドで知ることができます。

B = {1, 2, 4}
A = {1, 2, 3, 4, 5}
print(B <= A)
print(B.issubset(A))
結果
True
True

このほか、=や < >などを使って、集合の関係をTureまたはFalesで知ることができます。