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