Pythonのset型について

Pythonではset型は集合を表現します。集合の和、差、積、対称差といった数学的な演算もサポートしています。

集合型

Pythonでは集合型(set型)は、{ } で括って表現します。集合型は、重複する要素をもたない、順序づけされていない要素の集まりです。

x = {1,2,3}
print(type(x))
# <class 'set'>

空の集合

要素がゼロ個の{}は、dict型を意味するので注意。空の集合が欲しいときは、set()を使うこと。

x = {}
print(type(x))
# <class 'dict'>

x = set()
print(type(x))
# <class 'set'>

集合の和

集合の和(union)は、”|”演算子を使います。”+”ではなく、”|” なのは、”+”だと単純な連結に見えるからでしょうか。

x = {1,2,3}
y = {1,3,4}
z = x | y
print(z)
# {1, 2, 3, 4}

z = x + y
# TypeError : unsupported operand type(s) for +: 'set' and 'set'

また、集合型は重複した値は持てないことに注意しましょう。上の例では、{3} はひとつしかありません。

集合の積

集合の積(intersection)は、”&”演算子で表現します。2つの集合に共通する要素からなる集合が返ります。

x = {1,2,3}
y = {1,3,4}
z = x & y
print(z)
# {1, 3}

集合の差

集合の差(difference)は、”-“演算子で表現します。2つの集合に共通する要素を取り除きます。

x = {1,2,3}
y = {1,3,4}
z = x - y
print(z)
# {2}
# x,yに共通する要素は、1,3でこれがxから取り除かれている。

集合の対称差

集合の対称差 (symmetric difference) は、”^”演算子を用います。xorを行う論理演算子である”^”演算子を使いまわしています。

x = {1,2,3}
y = {1,3,4}
z = x ^ y
print(z)
# {2, 4}
# x,yに共通する要素は 1,3 で、xとyの和集合から
# この共通する要素を取り除いたものが対称差

セット内包表現

Pythonの内包表現はlist型に対してしか使えないと思っている人が多いですが、set型、dict型に対しても使えます。 → Pythonの内包表現について

x = {x*2 % 5 for x in range(4)}
print(x)
# {0, 1, 2, 4}

x = {i*2:j for i,j in zip(range(4),range(4))}
print(x)
# {0: 0, 2: 1, 4: 2, 6: 3}
# dict内包表記は、{i:j for ... }のように":"を使う。またzip()と相性が良い。

(Visited 13 times, 1 visits today)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です