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)
['りんご', 'バナナ', 'みかん']
この方法は処理の中身を自分で理解できるので、プログラミングの練習にもぴったりです。
まとめ
Pythonでリストの重複を削除する方法には、setやdict.fromkeysを活用する手軽な方法から、for文による手動の削除方法まで、さまざまなアプローチが存在します。どの方法も、りんごやバナナなどの果物データを例にして学んだように、重複した要素をひとつにまとめるという共通の目的を持っています。特にsetを使った方法は、同じ要素を一度だけ残すという集合の特徴を強みにして、重複削除を非常に簡単に行える点が魅力といえるでしょう。また、辞書を活用したdict.fromkeysによる重複削除は、元の順番を保ちながら重複を取り除けるため、順序の意味を重視する場面で大いに役立ちます。順番が変わってしまうsetとは異なり、最初に登場した順番を守りながら整理できるため、画面表示やデータ分析の前処理にぴったりといえます。
さらに、もとのリストを壊さずに新しいリストとして重複を削除できる点は、どちらの方法にも共通する大きな利点です。もとのデータを保持したまま別の用途に活用したい場合でも、安全に試すことができます。数値リストにおいても文字列リストにおいても、両方の方法は柔軟に対応できるため、Pythonのリスト操作を学ぶうえで基本となる知識です。りんごやみかんといった文字列のリストだけでなく、一二三四五といった数字のリストにも同じように使えるため、幅広いデータ処理に応用できます。
また、for文を使った重複削除方法も紹介しましたが、この方法は単に同じ結果を得られるというだけではありません。not in演算子を使って重複を判断し、初めて現れた要素だけを追加していくという流れは、Pythonの基本構文を理解するうえでもとても役立ちます。とくに初心者にとっては、「なぜ同じ値が増えるのか」「どうしたら防げるのか」という疑問を自分の手で解決しながら学べる機会となるため、リストの基礎をより深く理解する練習にもなります。
以下は、setとdict.fromkeysの違いを比べられる簡単なサンプルプログラムです。これまでの記事の流れをふまえながら、重複削除がどのように動くかを確認できます。
重複削除のサンプルプログラム
# setで重複削除(順番は保証されない)
data = ["りんご", "バナナ", "りんご", "みかん"]
unique_a = list(set(data))
print(unique_a)
# dict.fromkeysで順番を保って重複削除
unique_b = list(dict.fromkeys(data))
print(unique_b)
# 手動で順番を守りながら重複削除
unique_c = []
for item in data:
if item not in unique_c:
unique_c.append(item)
print(unique_c)
このように、Pythonのリスト操作では目的に応じて異なる方法を選択できるため、データ処理の柔軟性が大きく広がります。処理速度を優先したい場合、順番を保ちたい場合、動きを理解したい場合など、場面によって使い分けることで、より適切で読みやすいプログラムが作れます。初心者のうちにこうした違いを理解しておくと、複雑なデータを扱う場面でも迷わずコードを書けるようになるでしょう。今回扱ったset・dict.fromkeys・for文による重複削除の三つの方法は、Python学習の初期段階では特に重要な知識となります。
生徒
「今日のまとめで、setとdict.fromkeysの違いがすごくよく分かりました!順番が変わるかどうかが大きなポイントなんですね。」
先生
「その通りだよ。重複削除はどんなデータでもよく使う基礎だから、順番をどう扱いたいかで方法を選ぶのが大事なんだ。りんごやバナナのリストでも、実は学べることはたくさんあるんだよ。」
生徒
「for文で手動の方法も分かりやすかったです!仕組みを自分で体験できるのが良いですね。」
先生
「理解が深まるからね。Pythonではいろんな方法で同じ結果を出せるから、まずは目的をはっきりさせて、いちばん合う方法を選んでいくと良いよ。」
生徒
「これでリストの重複削除も安心して使えます!次はもっと複雑なリストにも挑戦してみますね。」
先生
「うん、ぜひやってみてね。基本を押さえていれば、どんなデータ処理でもきっと応用できるよ。」