set
set: 集合演算ができる
値の重複不可能
mutableなオブジェクト
要素の順を持たない
in での存在チェックや、内包表記はリストと同じ
== での比較はリストと同じだが、順序は見ない
基本構文
初期化
a = {"bb", "cc", "aa"} print(a) # {'cc', 'bb', 'aa'}
初期化 : set(値, 値,...)
s = set(range(5, 10)) print(s) # (5, 6, 7, 8, 9)
リストの重複を削除
l = [1, 2, 3, 4, 5, 1, 2] s = set(l) # setは重複を除外する print(s) # {1, 2, 3, 4, 5} l = list(s) print(l) # [1, 2, 3, 4, 5]
要素の追加 : add(値) / 削除 : remove(値)
x = set() # 空のset作成 x.add("banana") x.add("pine") x.add("cherry") print(x) # {'cherry', 'pine', 'banana'} # 順不同 x.remove("pine") # 要素がない場合、エラー print(x) # {'cherry', 'banana'}
削除 : discard(要素がなくてもエラーにならない)
a = {"aa", "bb", "cc"} a.discard("dd") print(a) # {'aa', 'cc', 'bb'} a.discard("bb") print(a) # {'aa', 'cc'}
setを空にする : clear()
a = {"aa", "bb", "cc"} print(a) # a = {'bb', 'aa', 'cc'} a.clear() print(a) # set()
pop(値)
a = {"aa", "bb", "cc"} x = a.pop() print(a) # {'aa', 'cc'} print(x) # bb # 取れる値はランダム
変更不可のfrozenset(値,値,...)
data = frozenset(["aa", "bb", "cc"]) print(data) # frozenset({'aa', 'bb', 'cc'}) print(type(data)) # <class 'frozenset'>
リストからsetの内包表記 : {式 for 値 in イテラブル if 条件式}
numbers = [-1.3, 1.2, -1.2, 1.1, 1.5, -1.1, 1.2, 1.1, 1.4] num_set = {num for num in numbers if num > 0} # リストから重複削除、整数のセット print(num_set) # {1.2, 1.4, 1.1, 1.5}
集合演算
演算子(|, &, -, ^)はset同士でないと使えないが、 union(), intersection(), difference(), symmentric_difference() はイテラブルであれば使える
和集合: union(): |
a = {"リンゴ", "みかん"} b = {"みかん", "スイカ"} c = {"パイナップル", "スイカ"} d = a | b | c print(d) # {'スイカ', 'パイナップル', 'リンゴ', 'みかん'} e = ["いちご", "パイナップル"] # リスト f = ("バナナ", "みかん") # タプル mix = d.union(e, f) print(mix) # {'スイカ', 'パイナップル', 'リンゴ', 'バナナ', 'みかん', 'いちご'}
積集合: intersection(): &
a = {"リンゴ", "みかん"} b = {"みかん", "スイカ"} c = {"パイナップル", "みかん", "スイカ"} d = a & b & c print(d) # {'みかん'} a = {"リンゴ", "みかん"} b = {"みかん", "スイカ"} c = {"パイナップル", "みかん", "スイカ"} d = a.intersection(b, c) print(d) # {'みかん'}
差集合: difference(): -
a = {"リンゴ", "みかん"} b = {"みかん", "スイカ"} c = a - b print(c) # {'リンゴ'} a = {"リンゴ", "みかん"} b = {"みかん", "スイカ"} c = a.difference(b) print(c) # {'リンゴ'}
対称差集合: symmetric_difference(): ^
a = {"リンゴ", "みかん"} b = {"みかん", "スイカ"} c = a ^ b print(c) # {'リンゴ', 'スイカ'} a = {"リンゴ", "みかん"} b = {"みかん", "スイカ"} c = a.symmetric_difference(b) print(c) # {'リンゴ', 'スイカ'}
代入複合演子
セット値を更新する為、frozensetには使えない
和集合で更新 : update(set,set,...) : |=
a = {"リンゴ", "みかん"} b = {"みかん", "スイカ"} c = {"パイナップル", "スイカ"} a.update(b, c) print(a) # {'みかん', 'パイナップル', 'スイカ', 'リンゴ'} a = {"リンゴ", "みかん"} b = {"みかん", "スイカ"} c = {"パイナップル", "スイカ"} a |= b a |= c print(a) # {'みかん', 'パイナップル', 'スイカ', 'リンゴ'}
積集合で更新: intersection_update(): &=
a = {"リンゴ", "みかん"} b = {"みかん", "スイカ"} c = {"パイナップル", "みかん", "スイカ"} a.intersection_update(b, c) print(a) # {'みかん'} a = {"リンゴ", "みかん"} b = {"みかん", "スイカ"} c = {"パイナップル", "みかん", "スイカ"} a &= b a &= c print(a) # {'みかん'}
差集合で更新: difference_update(): -=
a = {"リンゴ", "みかん"} b = {"みかん", "スイカ"} a.difference_update(b) print(a) # {'リンゴ'} a = {"リンゴ", "みかん"} b = {"みかん", "スイカ"} a -= b print(a) # {'リンゴ'}
対称差集合で更新: symmetric_difference_update(): ^=
a = {"リンゴ", "みかん"} b = {"みかん", "スイカ"} a.symmetric_difference_update(b) print(a) # {'リンゴ', 'スイカ'} a = {"リンゴ", "みかん"} b = {"みかん", "スイカ"} a ^= b print(a) # {'リンゴ', 'スイカ'}
要素の比較
全ての要素の比較(順不同) : == / !=
a = {"aa", "bb", "cc"} b = {"aa", "bb", "cc"} c = {"aa", "bb", "dd"} print(a == b) # True print(a != c) # True
共通要素が1つもない : isdisjoint()
a = {"aa", "bb", "cc"} b = {"x", "bb", "y"} c = {"o", "p", "q"} print(a.isdisjoint(b)) # "bb"が一致している # False print(a.isdisjoint(c)) # 1つも一致していない # True
部分集合(サブセット) : issubset(set) : <=
同値でもTrueになる
a = {"red", "blue"} b = {"blue", "green", "red", "pink"} print(a.issubset(b)) # True print(a <= b) # True
上位集合(スーパーセット) : issuperset(set) : >=
a = {"blue", "green", "red", "pink"} b = {"red", "blue"} print(a.issuperset(b)) # True print(a >= b) # True