【Python入門】集合(set)について,Python3

Pythonにとって”集合”という概念はあとから追加されたものです。
sample_set = {1, 2, 3, 4, 5}のように書き、辞書と非常に似ていますが、辞書と違いキーがありません。
辞書に値だけがある集まりというイメージです。{}を使う点は共通してますね。

集合は、順序やキーなどの構造を持たず、単純に集団を形成してるといいましょうか。
リストのようにオフセットで管理する必要もなく、辞書のキーで管理する必要もない要素たちを扱いたい時に使います。

set()で集合を作成

注意としては、empty_set = {}のように書いてしまうと空の辞書ができてしまいます
空の集合をつくる際にはset()を使いましょう。

>>> empty_set = set()
>>> empty_set
set()

>>> type(empty_set)
<class 'set'>

>>> empty_dict = {}
>>> empty_dict
{}

>>> type(empty_dict)
<class 'dict'>

>>> sample_set = {1, 2, 3}
>>> sample_set
{1, 2, 3}

>>> type(sample_set)
<class 'set'>

set()で他のデータ型を集合へ

文字列、リスト、タプル、辞書を集合へ変換できる。

>>> set('abcdefg')
{'a', 'f', 'e', 'g', 'b', 'c', 'd'}

>>> set('good') #"o"という文字は2つある。重複は取り除かれる
{'o', 'd', 'g'}

>>> set(['good', 'better', 'good', 'best']) #リストを集合へ
{'best', 'better', 'good'}

>>> set(('good', 'better', 'good', 'best')) #タプルを集合へ
{'best', 'better', 'good'}

>>> set({'banana': 'yellow', 'banana': 'delicious', 'orange': 'Ehime'}) #辞書を集合へ
{'orange', 'banana'}

ある値が集合に含まれているかどうか

>>> numbers = {'1', '2', '3'}
>>> '2' in numbers
True
>>> '4' in numbers
False

集合の組み合わせ、演算

>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a
{'d', 'c', 'r', 'a', 'b'}
>>> b
{'m', 'z', 'l', 'c', 'a'}

>>> a | b #和集合。aまたはbに含まれているもの
{'m', 'z', 'd', 'c', 'l', 'r', 'a', 'b'}

>>> a.union(b) #a|bと同じ意味
{'m', 'z', 'd', 'c', 'l', 'r', 'a', 'b'}

>>> a - b #差集合。aには含まれているがbにはないもの
{'d', 'r', 'b'}

>>> a.difference(b) #a-bと同じ意味
{'d', 'r', 'b'}

>>> a & b #aかつb。aにもbにも含まれているもの
{'c', 'a'}

>>> a ^ b #どちらか片方には含まれているが、両方には含まれていないもの
{'m', 'r', 'z', 'd', 'l', 'b'}
>>> a.symmetric_difference(b) #a ^ bと同じ意味
{'m', 'r', 'z', 'd', 'l', 'b'}

部分集合(逆は上位集合)

>>> a = {1, 2, 3, 4, 5}
>>> b = {1, 2, 3}

>>> b <= a #bはaの部分集合
True
>>> b.issubset(a)
True

>>> a >= b #aはbの上位集合
True
>>> a.issuperset(b) #a>=bと同じ意味
True

>>> a < b #aはbの真部分集合ではない
False

>>> b < a #bはaの真部分集合である
True

>>> a < a #自分自身の真部分集合にはなれない
False

>>> a >= a #すべての集合は、自分自身の上位集合である
True
>>> a.issuperset(a) #a>=aと同じ意味
True