【Python】set型の高度な使い方: 集合演算と応用例

writing-girl プログラミング

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
タイトルとURLをコピーしました