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