Pythonのセット(set)の使い方!重複を排除する集合型の活用方法
生徒
「Pythonで同じ値が何度も入ってしまうのを防ぐにはどうすればいいですか?」
先生
「そんなときには、set(セット)
というデータ型が便利です。同じ値を自動的に省いてくれる特徴がありますよ。」
生徒
「へぇー!リストとかタプルとはどう違うんですか?」
先生
「それでは、Pythonのセット型の使い方を、リストとの違いも含めて丁寧に解説していきましょう!」
1. Pythonのset(セット)とは?
Pythonのセット(set)型は、重複する値を自動的に取り除く集合型のデータ構造です。数学の「集合」と似ていて、同じ値は1つしか存在できません。
セットは、中かっこ {}
を使って作成します。
colors = {"赤", "青", "赤", "緑", "青"}
print(colors)
{'緑', '赤', '青'}
このように、重複した「赤」や「青」が1つにまとめられています。Pythonのセットは、自動的に重複を排除してくれます。
2. リストやタプルとの違い
Pythonのリストやタプルは、同じ値を何回でも入れられますが、セットは同じ値を1回だけしか持てないのが大きな違いです。
また、セットは順番を持たないため、インデックス(番号)でのアクセスはできません。
colors = {"赤", "青", "緑"}
print(colors[0]) # エラーになります
TypeError: 'set' object is not subscriptable
セットの中の値を順番に使いたい場合は、for
ループで繰り返す方法を使います。
3. set型の作り方と基本操作
セットを作るには{}
を使うか、set()
関数を使います。
nums = set([1, 2, 2, 3, 4])
print(nums)
{1, 2, 3, 4}
このように、リストをset()
で変換することで、重複を取り除いたセットを作れます。
4. setに要素を追加する(add)
セットに新しい要素を追加したい場合は、add()
メソッドを使います。
colors = {"赤", "青"}
colors.add("黄色")
print(colors)
{'赤', '青', '黄色'}
すでにある値を追加しても、重複は無視されます。
5. setから要素を削除する(remove/discard)
セットから特定の値を削除するにはremove()
かdiscard()
を使います。
colors = {"赤", "青", "緑"}
colors.remove("青")
print(colors)
{'赤', '緑'}
remove()
は存在しない値を消そうとするとエラーになりますが、discard()
はエラーにならずにスルーします。
6. セットの重複排除の活用例
たとえば、名前の一覧に重複があった場合、セットを使えば簡単に重複を消せます。
names = ["さとし", "ゆうこ", "さとし", "たけし", "ゆうこ"]
unique_names = set(names)
print(unique_names)
{'たけし', 'さとし', 'ゆうこ'}
簡単に一意な値だけを取り出すことができるので、データ整理に便利です。
7. 集合演算で差・共通点・和を計算しよう
Pythonのセットでは、数学で習う「集合」と同じように、集合演算ができます。
- 和集合(どちらかにある値)→
|
またはunion()
- 積集合(両方にある値)→
&
またはintersection()
- 差集合(一方にしかない値)→
-
またはdifference()
a = {1, 2, 3}
b = {3, 4, 5}
print(a | b) # 和集合
print(a & b) # 積集合
print(a - b) # 差集合
{1, 2, 3, 4, 5}
{3}
{1, 2}
このように、セットを使うと複雑なデータの比較や分析も簡単にできます。
8. セットの注意点と使いどころ
Pythonのセットは便利ですが、次のような注意点があります。
- 順番を持たないので
colors[0]
のようなアクセスはできない - リストや辞書のようにソートされていない
- 中に入れられるのは変更できないデータ型のみ(リストなどは入れられない)
セットは、「重複をなくしたい」「データの中身を比較したい」「同じ値を1つだけ残したい」といったときにとても役立ちます。