サイトアイコン Python Snippets

重複のない集合set 集合演算

Setは重複のない要素をもつ順序なしのコレクションオブジェクト。
リストから重複する要素を取り除いたり、積集合・和集合・差集合のような集合演算を使うために使用します。

>>> s = {1, 2, 3} # 以前はsetのリテラルがなかったため set([1, 2, 3])のように書いていました。
>>> s
{1, 2, 3}
>>> s.add(3)   #重複するので変化ない
>>> s.add(4)
>>> s
{1, 2, 3, 4}

>>> l = ["hello", "world", "apple", "world", "python", "apple"]   #重複する要素をもつリスト
>>> l
['hello', 'world', 'apple', 'world', 'python', 'apple']
>>> list(set(l))                       #setを作成して重複を取り除いて再びリスト化する
['python', 'world', 'hello', 'apple']

集合演算

和集合、差集合、積集合(共通部分)、対象差(排他的論理和)

>>> s = {1, 2, 3}
>>> s.union({3, 4, 5})  #和集合
{1, 2, 3, 4, 5}
# もしくは s | { 3, 4, 5} と書いても同じ
>>> s | {3, 4, 5}
{1, 2, 3, 4, 5}

>>> s.difference({3, 4, 5})  #差集合
{1, 2}
# もしくは s - { 3, 4, 5} と書いても同じ
>>> s - {3, 4, 5}
{1, 2}

>>> s.intersection({3, 4, 5}) #積集合 (共通部分)
{3}
# もしくは s & { 3, 4, 5} と書いても同じ
>>> s & { 3, 4, 5}
{3}

>>> s.symmetric_difference({3, 4, 5})  #どちらか一方に属する要素
{1, 2, 4, 5}
# もしくは s ^ { 3, 4, 5} と書いても同じ
>>> s ^ { 3, 4, 5}


>>> s.issubset({3, 1, 2, 5})  # sが [3, 1, 2, 5]の部分集合である場合True
True
>>> s.issubset({3, 1, 5})
False

>>> s.issuperset({3, 1})    # [3, 1]がsの部分集合の場合True
True
>>> s.issuperset({3, 1, 2})
True
>>> s.issuperset({3, 1, 2, 5})
False
関連記事:

モバイルバージョンを終了