Pythonのリストの重複を削除する方法を解説!初心者向けにsetとdict.fromkeysの使い方をやさしく説明
生徒
「Pythonでリストを作っていたら、同じデータが何回も入ってしまいました。こういうときって、重複を消す方法ってあるんですか?」
先生
「ありますよ!Pythonではset()やdict.fromkeys()という機能を使って、リストの重複を簡単に取り除くことができます。」
生徒
「おぉ!それなら安心です。どうやって使うんですか?」
先生
「それでは、Pythonでリストの重複を削除する方法について、順番に見ていきましょう!」
1. リストの重複とは?なぜ削除したいのか
まず、「重複」とは同じデータが複数ある状態のことです。たとえば次のようなリストを考えてみましょう。
data = ["りんご", "バナナ", "りんご", "みかん", "バナナ"]
このリストには「りんご」や「バナナ」が2回ずつ入っていますね。1つずつだけ残したいときに、重複を削除する方法が必要になります。
2. set()を使って重複を削除する
最も簡単な方法は、set()を使う方法です。setとは「集合」と呼ばれる型で、同じ要素を1つにまとめる特徴があります。
data = ["りんご", "バナナ", "りんご", "みかん", "バナナ"]
unique_data = list(set(data))
print(unique_data)
['りんご', 'バナナ', 'みかん']
set()にリストを渡すと、自動的に重複を取り除いてくれます。そしてlist()で元のリスト型に戻すことで、通常通り使えるようになります。
3. set()は順番が変わることがある
set()は便利ですが、リストの順番が変わってしまうという注意点があります。
たとえば、元のリストが「りんご」「バナナ」「みかん」の順でも、set()を使うと並びが変わることがあります。
もし元の順番を保ちたい場合は、次に紹介するdict.fromkeys()がオススメです。
4. dict.fromkeys()で順番を保って重複を削除する
dict.fromkeys()を使うと、リストの順番をそのままに重複だけを取り除くことができます。
これは辞書(dictionary)というデータ型を使ったテクニックです。
data = ["りんご", "バナナ", "りんご", "みかん", "バナナ"]
unique_data = list(dict.fromkeys(data))
print(unique_data)
['りんご', 'バナナ', 'みかん']
この方法なら、最初に出てきた順番がそのまま保たれるため、見た目を重視したいときにも使いやすいです。
5. 重複を削除しても元のリストは変わらない
set()もdict.fromkeys()も、新しいリストを作る方法です。つまり、元のリストには影響がありません。
もとのデータを壊したくないときでも安心して使えます。
data = ["りんご", "バナナ", "りんご"]
unique = list(set(data))
print("元のリスト:", data)
print("重複削除後:", unique)
元のリスト: ['りんご', 'バナナ', 'りんご']
重複削除後: ['りんご', 'バナナ']
6. 数字でも文字列でも使える
set()やdict.fromkeys()は、文字列だけでなく数値や混合リストにも使えます。
numbers = [1, 2, 2, 3, 4, 4, 5]
print(list(set(numbers)))
[1, 2, 3, 4, 5]
このように、リストの中に同じ内容があれば自動で1つにしてくれるので、あらゆるデータで活用できます。
7. for文で重複を手動で削除する方法もある
少し応用ですが、自分でfor文を使って重複を除くこともできます。初心者でも練習にはなります。
data = ["りんご", "バナナ", "りんご", "みかん"]
unique = []
for item in data:
if item not in unique:
unique.append(item)
print(unique)
['りんご', 'バナナ', 'みかん']
この方法は処理の中身を自分で理解できるので、プログラミングの練習にもぴったりです。