Pythonでは、集合を表すのに set 型を使います。
set 型は、重複を許さない要素の集合を表すことができます。
この記事では、set 型を使った集合演算や応用例について説明します。
set の基本
set を作成するには {} で囲むか、set () を使います。
set1 = {1, 2, 3}
print(type(set1)) # => <class 'set'>
set2 = set([1, 2, 3])
print(type(set2)) # => <class 'set'>
重複を排除する
set 型は、重複を許さない要素の集合を表すので、これを利用して重複を排除できます。
たとえば、リストから set 型を使って重複を排除するには次のように書きます。
a = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
# set() を使って重複を排除する
print(set(a)) # => {1, 2, 3, 4}
print(type(set(a))) # => <class 'set'>
# list() を使ってリストに戻す
unique_list = list(set(a))
print(unique_list) # => [1, 2, 3, 4]
print(type(unique_list)) # => <class 'list'>
集合演算の基本
set 型を使う上で欠かせないのが集合演算です。
次の基本的な集合演算について解説します。
- 和集合:2つの集合の要素のうち、どちらかの集合に属する要素からなる集合
- 隻集合:2つの集合の要素のうち、両方の集合に属する要素からなる集合
- 差集合:1つの集合に属するが、もう一方の集合には属さない要素からなる集合
和集合
和集合は、2つの集合に含まれる要素のすべてを集めた集合のことです。
set 型では、「|」演算子または「union()」メソッドを使います。
set1 = {1, 2, 3}
set2 = {2, 3, 4}
print(set1 | set2) # => {1, 2, 3, 4}
set_union = set1.union(set2)
print(set_union) # => {1, 2, 3, 4}
積集合
積集合は、2つの集合に共通する要素からなる集合のことです。
set 型では、「&」演算子または「intersection()」メソッドを使います。
set1 = {1, 2, 3}
set2 = {2, 3, 4}
print(set1 & set2) # => {2, 3}
set_intersection = set1.intersection(set2)
print(set_intersection) # => {2, 3}
差集合
差集合は、2つの集合のうち片方にだけ含まれる要素からなる集合のことです。
set 型では、「-」演算子または、「difference()」メソッドを使います。
set1 = {1, 2, 3}
set2 = {2, 3, 4}
print(set1 - set2) # => {1}
set_difference1 = set1.difference(set2)
print(set_difference1) # => {1}
print(set2 - set1) # => {4}
set_difference2 = set2.difference(set1)
print(set_difference2) # => {4}
比較演算子
set 型は、整数型や文字列型と同じように比較演算子を使うことができます。
- ==:2つの集合が等しいとき、True
- !=:2つの集合が異なるとき、True
- <:1つ目の集合が2つ目の集合よりも小さいとき、True
- <=:1つ目の集合が2つ目の集合よりも小さいか等しいか、True
a = {1, 2, 3}
b = {1, 2, 3, 4}
print(a == b) # => False
print(a < b) # => True
a.add(4)
print(a == b) # => True
print(a < b) # => False
set 型のメソッド
add
add を使えば、要素を追加できます。
a = {1, 2, 3, 4, 5}
a.add(6)
print(a) # => {1, 2, 3, 4, 5, 6}
remove
remove を使えば、要素を削除できます。
a = {1, 2, 3, 4, 5}
a.remove(3)
print(a) # => {1, 2, 4, 5}
clear
clear を使えば、set のすべての要素を削除します。
a = {1, 2, 3, 4, 5}
a.clear()
print(a) # => set()
sum
sum を使えば、集合の総和を計算できます。
a = {1, 2, 3, 4, 5}
print(sum(a)) # => 15
in
in を使えば、指定した要素が集合に含まれているか判定できます。
a = {1, 2, 3, 4, 5}
if 3 in a:
print("ここが実行される")
else:
print("実行されない")
応用例
重複を取り除く
set を使えば重複を取り除けます。
a = [1, 2, 2, 3, 3, 3]
b = set(a)
print(b) # => {1, 2, 3}
重複があるか調べる
配列の要素の中に、重複があるか set を使って判定できます。
重複があるかを調べるには、配列の要素を set 型に格納します。
set 型に配列することで、重複した要素を排除できます。
そして、元の要素数と set 型にした要素数を比較することで重複があるか判定できます。
def has_duplicate(arr):
return len(set(arr)) != len(arr)
arr1 = [1, 2, 3, 4, 1]
arr2 = [1, 2, 3, 4, 5]
print(has_duplicate(arr1)) # => True
print(has_duplicate(arr2)) # => False