Pythonの集合(set)

set型とは

  • 集合.同じ要素を重複して持たない.
  • 生成には中カッコ{}またはset()関数を使用する.
>>> a = {1,2,3,4,5,6,7}
>>> b = set([2,4,6,8,10])
>>> a
{1, 2, 3, 4, 5, 6, 7}
>>> b
{8, 2, 10, 4, 6}

特徴

  • 重複しない要素を順不同で集めたものなので,順序の概念がない.
    • 順序の概念がない -> スライスとかは使えない.
    • 要素が重複しない -> 既に同じ要素が存在すると、要素が追加されない.
>>> a
{1, 2, 3, 4, 5, 6, 7}
>>> a.add(2)
>>> a
{1, 2, 3, 4, 5, 6, 7} #2が既に存在するので追加されない
  • ("集合"なので当然といえば当然ながら)集合演算ができる(後述).

操作

>>> b
>>> b.add(12)
>>> b
{2, 4, 6, 8, 10, 12}
>>> b.remove(2)
>>> b
{4, 6, 8, 10, 12}

集合演算

a = {1,2,3,4,5,6,7}
b = {4,6,8,10,12}
# a:{1,2,3,4,5,6,7, , ,  ,  ,  }
# b:{ , , ,4, ,6, ,8, ,10,  ,12}

>>> a&b #aとbの積集合(=共通部分,"aかつb")
{4, 6}
>>> a.intersection(b) #a&bに同じ
{4, 6}

>>> a|b #aとbの和集合("aまたはb")
{1, 2, 3, 4, 5, 6, 7, 8, 10, 12}
>>> a.union(b) #a|bに同じ
{1, 2, 3, 4, 5, 6, 7, 8, 10, 12}

>>> a^b #排他的論理和
{1, 2, 3, 5, 7, 8, 10, 12}

>>> a.difference(b) #差集合a-b
{1, 2, 3, 5, 7}
>>> a-b
{1, 2, 3, 5, 7}

>>> b.difference(a) #差集合b-a
{8, 10, 12}
>>> b-a
{8, 10, 12}
>>> c={4,6,8}
>>> c.issubset(a) #cはaの部分集合かどうか判定
False
>>> c.issubset(b)
True
>>> b.issuperset(c) #bはcの上位集合かどうか判定
True
>>> a.issuperset({1,2,5,7})
True