Python 集合(set)
概要
- 重複も順序もない要素のあつまり
- 順序がないため、インデックス指定での要素取得はできない。
集合 生成
「{}」、set()
※空集合はset()のみset1= {2, 3, 2, 3, 1, 3, 1, 3, 3, 1} print(set1) print(type(set1)) # リストから set2= set(['卯月', '皐月', '卯月', '水無月','卯月']) print(set2) print(type(set2)) # 空集合から set3=set() print(set3) print(type(set3)) # タプルから set4=set(('卯月', '皐月', '卯月', '水無月','卯月')) print(set4) print(type(set4)) # 辞書から set5=set({'卯月': '4月', '皐月': '5月', '水無月': '6月'}) print(set5) print(type(set5))
表示イメージ
{1, 2, 3} <class 'set'> {'卯月', '皐月', '水無月'} <class 'set'> set() <class 'set'> {'卯月', '皐月', '水無月'} <class 'set'> {'卯月', '皐月', '水無月'} <class 'set'>
セット 組み込み関数
- len(set)・・・要素数
- x,y,z = set・・・ 多重代入
- 判定
- 値 in set・・・集合に含むか
- 値 not in set・・・集合に含まないか
セット 集合演算
- 和集合「|」
- 積集合「&」
- 差集合「-」
- 対称差「^」
※メソッドもある。後述記載
# 和集合 print({1, 2, 3, 4} | {3, 4, 5, 6}) # 積集合 print({1, 2, 3, 4} & {3, 4, 5, 6}) # 差集合 print({1, 2, 3, 4} - {3, 4, 5, 6}) # 対称差 print({1, 2, 3, 4} ^ {3, 4, 5, 6})
表示イメージ
{1, 2, 3, 4, 5, 6} {3, 4} {1, 2} {1, 2, 5, 6}
セット 比較合演算
- 同一か判定「値==set」
- 相違か判定「値!=set」
- 包括関係
- 値を全部含むか判定「値<=set」
- 値を全部含み、集合の方が要素が多いか判定「値<set」]
print({1, 2, 3} <= {1, 2, 3}) print({1, 2} <= {2, 3, 4}) print({2, 3} <= {2, 3, 4}) print() print({1, 2, 3} < {1, 2, 3}) print({1, 2, 3, 4} < {1, 2, 3}) print({1, 2, 3} < {1, 2, 3, 4}) print({1, 2} < {1, 2, 3})
表示イメージ
{1, 2, 3, 4, 5, 6} {3, 4} {1, 2} {1, 2, 5, 6}
セット メソッド
add・・・要素の追加 ※破壊的
set.add(要素)
set1 = {1, 2, 3} set1.add(10) set1
表示イメージ
{1, 2, 3, 10}
add・・・要素の追加 ※破壊的
set.add(要素)
set1 = {1, 2, 3} set1.add(10) set1
表示イメージ
{1, 2, 3, 10}
add・・・要素の追加 ※破壊的
set.add(要素)
set1 = {1, 2, 3} set1.add(10) set1
表示イメージ
{1, 2, 3, 10}
remove・・・要素の削除 ※破壊的
set.remove(要素)
※削除対象が集合にないとエラーset1 = {1, 22, 3} set1.remove(22) print(set1) set1.remove(99)
表示イメージ
{1, 3} ---------------------------------------------------------------- KeyError Traceback (most recent call last)
discard・・・要素の削除 ※破壊的
set.discard(要素)
※削除対象が集合になくても、エラーにならない。set1 = {1, 22, 3} set1.discard(22) print(set1) set1.discard(99)
表示イメージ
{1, 3}
clear・・・全要素の削除、空にする ※破壊的
set.clear()
set1 = {1, 2, 3} set1.clear() set1
表示イメージ
set()
pop・・・ランダムな要素の1つ取得 ※破壊的
set.pop()
※空集合のとき、エラーになる。set1 = {1, 2, 3} print(set1.pop()) print(set1)
表示イメージ
1 {2, 3}
集合演算
- union(set) 和集合
- intersection(set) 積集合
- difference(set) 差集合
- symmetric_difference(set) 対称差
# 和集合 print({1, 2, 3, 4}.union({3, 4, 5, 6})) # 積集合 print({1, 2, 3, 4}.intersection({3, 4, 5, 6})) # 差集合 print({1, 2, 3, 4}.difference({3, 4, 5, 6})) # 対称差 print({1, 2, 3, 4}.symmetric_difference({3, 4, 5, 6}))
表示イメージ
{1, 2, 3, 4, 5, 6} {3, 4} {1, 2} {1, 2, 5, 6}