set(セット)の使い方、特徴、メソッド
pythonのsetは、{}やset(配列)などとして、宣言する
主に、以下のような特徴がある
- 同じ値を複数持つことがない(ユニーク)
- 順序が保持されていない(挿入された順番通りに取り出すことができない)
- ユニオンやインターセクションなどの集合処理を高速で行うことができる
Example
- タプルの宣言
print(set_a) # set_aには、{'a', 'd', 'c', 'b'}の4つの要素がある
print('e' in set_a) # set_aには、'e'はないため、Falseが返る
print('e' not in set_a) # set_aには、'e'があるため、Trueが返る
print(len(set_a)) # set_aの数を返す。4が返る
for i in set_a:
print(i) # set_aの中をループする。順番は保障されないため、実行するたびに表示される値が変わる
set_a.add('e') # set_aに'e'を追加する
set_a.remove('e') # set_aから'e'を削除する。'e'がない場合はKeyError
set_a.discard('e') # set_aから'e'を削除する。'e'がない場合にも何も起こりません
set_a.pop() # set_aから任意の要素を返して削除する
set_a.clear() # set_aから全ての要素を削除する
set(セット)のユニオン(Union合併)、インターセクション(積集合)、ディファレンス(差集合)
pythonのset(セット)では、以下のように利用する
- union(|)・・・ユニオン、和集合を返す
- intersection(&)・・・集合の共通する要素、積集合を返す
- difference(-)・・・片方の集合にあり、片方の集合にない要素、差集合を返す
- symmetric_difference(^)・・・どちらか一方にだけある要素の集合を返す
Example
- セットの各メソッド
t = {'c', 'd', 'e', 'f'}
# s|t,s.union(t)では、sとtの和集合を返す
s={'a', 'b', 'c', 'd'} , t={'c', 'd', 'e', 'f'} のどちらかに存在する{'a','b','c','d','e','f'}を返す
s | t
s.union(t)
# s&t,s.intersection(t)は、sとtの積集合を返す
s={'a', 'b', 'c', 'd'} , t={'c', 'd', 'e', 'f'} の共通要素{'c','d'}を返す
s & t
s.intersection(t)
# s-t,s.difference(t)は、sとtの差集合を返す
s={'a', 'b', 'c', 'd'} のうちt={'c', 'd', 'e', 'f'} の要素を除いた{'a','b'}を返す
s - t
s.difference(t)
# s^t,s.symmetric_difference(t)は、対象差を返す
s={'a', 'b', 'c', 'd'} , t={'c', 'd', 'e', 'f'} のsとtの片方に含まれる{'a','b','e','f'}を返す
s ^ t
s.symmetric_difference(t)
# 以下のようにすると値を追加することもできる
s |= t # s = sとtのユニオン、つまりsにtの値を追加します。
set(セット)のサブセット、ディスジョイントセット
pythonのset(セット)には、セットの要素が別のセットにすべて含まれているか(含んでいるか)どうかを確認するメソッド、issubset,issupersetというメソッドがある。
逆に、Aのsetの要素とBのsetの要素と1つも被っていない場合に、Trueを返す、disjointというメソッドもある
Example
- セットのメソッド(issubset, issuperset, isdisjoint)
t = {'apple', 'banana', 'lemon', 'grape'}
print(s.issubset(t)) # s={'apple', 'lemon'} は全てt={'apple', 'banana', 'lemon', 'grape'} に含まれる。sはtのサブセットでTrueとなる
print(t.issuperset(s)) # t={'apple', 'banana', 'lemon', 'grape'}はs={'apple', 'lemon'} を含むため、tはsのスーパーセットでTrueとなる
u = {'ringo', 'remon'}
print(t.isdisjoint(u)) # t={'apple', 'banana', 'lemon', 'grape'}とu{'ringo', 'remon'} の要素は一つも被っていないため、Trueを返す
【2020年版】: Python 3.8 データ構造、文法、アルゴリズム、オブジェクト指向、ライブラリ、完全マスター講座