Python_集合

集合について

Pythonでは、集合演算を行うためにset型データが用意されています。


集合の生成


#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8

# 配列を集合にします。
s = set([1, 2, 3])
print(s)  # {1, 2, 3}

# 同一値はまとめられます。
s = set([1, 2, 2, 3, 3, 3])
print(s)  # {1, 2, 3}

# 辞書を集合にすると、キーが要素になります。
s = set({"key1": 1, "key2": 2})
print(s)  # {'key1', 'key2'}

集合の追加・削除

集合に要素を追加するにはadd()を使います。

集合から要素を削除するにはremove()を使います。

集合を空にするにはclear()を使います。


# 集合に要素を追加します。
s.add(4)     # {1, 2, 3, 4}

# 2重登録しても変化はありません。
s.add(2)     # {1, 2, 3, 4}

# 要素を削除します。
s.remove(2)  # {1, 3, 4}

# 要素数を確認します。
len(s)       # 3

# 集合を空にします。
s.clear()    # set()

集合演算

論理演算

和(A にも B にも含まれる)、積(A と B で共通)、差(A にのみ含まれる)、対称差(A もしくは B にのみ含まれる)の演算子を用いることができます。


A = set([1, 2, 3, 4])
B = set([2, 3, 4, 5])

# 和集合を求める
s = A | B  # {1, 2, 3, 4, 5}

# 積集合を求める
s = A & B  # {2, 3, 4}

# 差集合を求める
s = A - B  # {1}
s = B - A  # {5}

# 対称差を求める
s = A ^ B  # {1, 5}

メソッドとしても用意されています。


メソッド 意味
A.intersection(B) A が B の 積 (A & B) を求めます
A.union(B) A が B の 和 (A | B) を求めます
A.difference(B) B に現れない A の 要素を求めます (A - B)
A.symmetric_difference(B) A が B の 両方に一度だけ現れる要素を求める (A ^ B)

部分集合

部分集合の判定用にissubset()及びissuperset()が用意されています。


A = set([1, 2, 3, 4, 5])
B = set([3, 4, 5])

# A が B の 部分集合 であれば真を返します。
A.issubset(B)  # False

# B が A の 部分集合 であれば真を返します。
B.issubset(A)  # True

# B が A の 部分集合 であれば真を返します。
A.issuperset(B)  # True

# A が B の 部分集合 であれば真を返します。
B.issuperset(A)  # False


関連ページ