本記事では、Pythonのsetについて、役割と使い方をサンプルコードを使って紹介します。
setの役割
Pythonにおけるsetは、一意な要素を持つコレクションです。主に、以下の用途で使用されます。
- 集合演算:和集合、積集合、差集合、対称差などの集合演算を簡単に行えます。
- リストやタプルから重複を除去:重複する要素を持たないため、重複の除去に便利です。
setの初期化
setは波括弧{}またはset()関数を使って作成します。空のセットを作成する場合は{}ではなく、set()を使用する必要がある点に注意してください({}と書くと空の辞書(dictionary)を作成してしまいます)。
# 空のsetの作成
empty_set = set()
# 要素を持つsetの作成
fruits = {'apple', 'banana', 'cherry'}
setの操作
要素の追加と削除
- add()メソッドで要素を追加できます。
- remove()メソッドで要素を削除できます。要素がセットに含まれていない場合はKeyErrorが発生します。
- discard()メソッドも要素を削除しますが、要素がセットに含まれていなくてもエラーは発生しません。
fruits.add('orange') # 'orange'を追加
fruits.remove('banana') # 'banana'を削除、セットにない場合はエラー
fruits.discard('banana') # 'banana'を削除、セットにない場合もエラーは発生しない
重複の除去
一意な要素を持つsetの特徴を生かしてリストの重複除去を行うことができます。
#coding: UTF-8
import collections # collections.Counterを使用するためのimport
# 重複要素を含むリスト
original_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'pear']
# リストの重複要素を除去 ★
unique_list = list(set(original_list)) # setを利用して重複を除去し、リストに戻す
# 重複除去後のリストを表示
for item in unique_list:
print(item)
集合演算
- 和集合(演算子
|
): 二つのセットの全ての要素を含む新しいセットを返します。 - 積集合(演算子
&
): 二つのセットに共通する要素のみを含む新しいセットを返します。 - 差集合(演算子
-
): 一方のセットには含まれるが、他方には含まれない要素のみを含む新しいセットを返します。 - 対称差(演算子
^
): 二つのセットのいずれか一方には含まれるが、両方には含まれない要素のみを含む新しいセットを返します。
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
# 和集合
c = a | b # {1, 2, 3, 4, 5, 6}
# 積集合
d = a & b # {3, 4}
# 差集合
e = a - b # {1, 2}
# 対称差
f = a ^ b # {1, 2, 5, 6}
注意点
- setは要素の順序を保持しません。要素が追加される順序に依存する操作をする場合は、setではなくリストやタプルを使用する必要があります。
- setの要素は変更不可能な(immutable)データ型でなければなりません。そのため、リストや他のセットを直接setの要素として持つことはできません。タプルは変更不可能な(immutable)データ型なのでsetの要素として持つことができます。
まとめ
本記事では、Pythonのsetについて役割と使い方を紹介しました。