Pythonのセット(set)とは?リストや辞書との違いを解説
生徒
「Pythonでセットって聞いたことがあるんですが、どんなものなんですか?」
先生
「セット(set)は、重複を許さないデータの集まりを扱うためのデータ型です。集合のような性質を持っています。」
生徒
「集合って数学のあの集合ですか?」
先生
「その通り。数学の集合と同じように、要素の重複がなく、順序もありません。リストや辞書と違う特徴を順番に見ていきましょう!」
1. セット(set)とは?
Pythonのセット(set)は、重複する値を自動的に排除するデータ型です。リストのように複数の要素をまとめて持てますが、順序は保証されません。
fruits = {"りんご", "バナナ", "みかん", "りんご"}
print(fruits)
{'りんご', 'バナナ', 'みかん'}
このように、同じ「りんご」を2回入れても、1つだけに整理されます。
2. リストとの違い
リストは順序を持ち、重複も許されますが、セットは順序なし・重複なしです。
list_data = ["りんご", "バナナ", "りんご"]
set_data = {"りんご", "バナナ", "りんご"}
print(list_data) # 重複あり
print(set_data) # 重複なし
['りんご', 'バナナ', 'りんご']
{'りんご', 'バナナ'}
重複データを取り除きたいときには、リストをセットに変換する方法が便利です。
unique_list = list(set(list_data))
print(unique_list)
['りんご', 'バナナ']
3. 辞書との違い
辞書(dict)はキーと値のペアを持つデータ型で、キーは重複できません。一方、セットはキーだけを集めたような構造で、値は持ちません。
dict_data = {"りんご": 3, "バナナ": 5}
set_data = {"りんご", "バナナ"}
print(dict_data) # キーと値のペア
print(set_data) # 値なし
{'りんご': 3, 'バナナ': 5}
{'りんご', 'バナナ'}
4. セットの便利な使い方
セットは集合演算が得意です。例えば、和集合(|)、積集合(&)、差集合(-)が簡単にできます。
set_a = {"りんご", "バナナ", "みかん"}
set_b = {"みかん", "ぶどう"}
print(set_a | set_b) # 和集合
print(set_a & set_b) # 積集合
print(set_a - set_b) # 差集合
{'りんご', 'バナナ', 'みかん', 'ぶどう'}
{'みかん'}
{'りんご', 'バナナ'}
これにより、データの比較や重複のチェックが効率的にできます。
5. セットの作り方と注意点
空のセットを作る場合はset()を使います。{}は空の辞書を意味するので注意しましょう。
empty_set = set()
empty_dict = {}
print(type(empty_set)) # <class 'set'>
print(type(empty_dict)) # <class 'dict'>
6. セットの活用例
例えば、大量のデータから重複を除く、共通の要素を見つける、特定の要素だけを抽出するといった処理に向いています。
emails_a = {"a@example.com", "b@example.com", "c@example.com"}
emails_b = {"b@example.com", "c@example.com", "d@example.com"}
common = emails_a & emails_b
print(common)
{'b@example.com', 'c@example.com'}
このように、集合の性質を活かしてデータ整理ができます。
まとめ
Pythonのセットは、重複を自動的に取り除き、要素の集合として非常に扱いやすいデータ型であることを学んできました。リストや辞書と比べても、それぞれの特徴がはっきりしており、特に「重複のないデータを効率的に扱いたい場面」に強みを発揮します。順序を持たないという性質は、一見すると扱いづらく見えるものの、データの比較や集合演算を行う際にはとても役立ちます。数学の集合と同じ感覚で扱うことができるため、和集合・積集合・差集合といった操作を直感的に使える点も大きな魅力です。リストから重複を取り除くためにセットへ変換する方法や、辞書との構造の違いも理解することで、より柔軟にデータ処理を行えるようになります。
また、セットの用途は重複削除だけにとどまらず、異なるデータ群から共通要素を抽出する、不要な要素を差し引く、あるいは複数の集合をまとめてひとつにするなど、多様な場面で実用的です。特に、メールアドレスのような大量のデータから重複を取り除く操作は、セットを使うことでわずか数行で実現できるため、業務・学習問わず頻繁に活用されるテクニックです。構造がシンプルである分、処理速度も軽快で、大量データを扱う場面で選ばれやすいのも特徴といえます。
サンプルプログラムまとめ
# リストから重複を除きつつ、集合演算も合わせて利用する例
fruits_a = ["りんご", "バナナ", "みかん", "バナナ"]
fruits_b = ["みかん", "ぶどう", "りんご"]
# 重複を取り除く
unique_a = set(fruits_a)
unique_b = set(fruits_b)
print("重複なしA:", unique_a)
print("重複なしB:", unique_b)
# 集合演算
union_set = unique_a | unique_b # 和集合
intersect_set = unique_a & unique_b # 積集合
diff_set = unique_a - unique_b # 差集合
print("和集合:", union_set)
print("積集合:", intersect_set)
print("差集合:", diff_set)
# 辞書のキーとの比較例
prices = {"りんご": 120, "バナナ": 90, "ぶどう": 300}
available = {"りんご", "バナナ", "みかん"}
print("共通している果物:", available & set(prices.keys()))
このように、セットを使ったデータ処理は非常に直感的でわかりやすく、ちょっとした処理を短いコードで書ける点も優れています。特に、データの整理や整形、重複チェックを行う場面では、セットが最も効率よく動作することが多いため、日常的にPythonで作業をする中で知っておくと大きな力になります。空のセットを作る場合の注意として、{}が辞書になってしまう点にも触れましたが、これも覚えておくことでエラーの防止につながります。集合演算を理解することで、リストや辞書との相互変換も自然に使いこなせるようになり、Python全体のデータ処理能力もさらに高まっていくでしょう。
生徒
「セットって、ただ重複を取り除くだけのものだと思っていましたが、集合演算までできるなんて驚きました!」
先生
「そうですね。数学の集合と同じように使えるので、データの比較や整理ではとても強力な道具になりますよ。リストとセットを組み合わせると効率的です。」
生徒
「たしかにリストから重複をなくしたいとき、セットに変換するのがすごく簡単でした。辞書との違いもわかりやすかったです。」
先生
「辞書はキーと値のペア、セットはキーだけの集合という違いがポイントですね。用途に応じて使い分けるとデータ処理がスムーズになりますよ。」
生徒
「集合演算も面白かったです!データ分析にも使えそうなので、もっと練習して身につけたいと思います。」
先生
「その意欲が大切です。セットの特徴を理解すれば、Pythonで扱えるデータの幅が大きく広がりますよ。ぜひ実践で活用してみてくださいね。」