Pythonのリストの重複を削除する方法!set()やdict.fromkeys()の使い方を解説
生徒
「先生、Pythonで同じデータが何度も入っているリストがあるんですけど、重複を取り除くにはどうすればいいですか?」
先生
「Pythonでは、set()やdict.fromkeys()を使えば、簡単にリストの重複を削除できますよ。」
生徒
「それってどうやって使うんですか?全然わからなくて…」
先生
「大丈夫です。初めてでもわかるように、ひとつずつ丁寧に説明していきましょう!」
1. Pythonで重複のあるリストとは?
リストとは、Pythonで複数のデータをまとめて扱える箱のようなものです。たとえば、同じ名前が何度も出てくる名簿のようなものをイメージしてください。
次のようなリストがあるとします:
names = ["たろう", "はなこ", "たろう", "じろう", "はなこ"]
このリストには「たろう」と「はなこ」が2回ずつ出てきますね。こうした重複(同じデータが繰り返されること)を取り除く方法を学んでいきましょう。
2. set()を使って重複を削除する
set()(セット)とは、順番を気にせず、重複を許さないデータの集まりのことです。紙に名前を書くとき、同じ名前がすでに書いてあれば新しく書かない、そんなイメージです。
次のように使います:
names = ["たろう", "はなこ", "たろう", "じろう", "はなこ"]
unique_names = list(set(names))
print(unique_names)
実行すると、重複が削除された結果が表示されます:
['たろう', 'じろう', 'はなこ']
※順番がバラバラになってしまうのがset()の特徴です。順番を大事にしたいときは、次に紹介する方法を使います。
3. dict.fromkeys()で順番を保ったまま重複削除
dict.fromkeys()は、Pythonの辞書という仕組みを使って、リストの順番を保ったまま重複を取り除く方法です。
辞書(dict)とは、「単語」と「意味」のように、1対1で情報を管理する箱です。
このメソッドでは、「キー」(単語のようなもの)としてリストの要素を一度だけ登録し、その順番を保ってくれます。
names = ["たろう", "はなこ", "たろう", "じろう", "はなこ"]
unique_names = list(dict.fromkeys(names))
print(unique_names)
実行結果はこうなります:
['たろう', 'はなこ', 'じろう']
リストの最初に出てきた順番のままで、重複を取り除くことができます。
4. for文を使って自分で重複を除去してみよう
Pythonには便利な機能がいろいろありますが、仕組みを理解するために、自分で重複を取り除く方法も紹介します。
ここではfor文を使って、リストを一つずつ確認しながら、同じものを二度入れないようにします。
names = ["たろう", "はなこ", "たろう", "じろう", "はなこ"]
unique_names = []
for name in names:
if name not in unique_names:
unique_names.append(name)
print(unique_names)
結果は以下のようになります:
['たろう', 'はなこ', 'じろう']
この方法なら、Pythonの基本的な構文の練習にもなりますね。
5. 数字や文字のリストにも使える!
リストの重複削除は、名前のような文字だけでなく、数字や他の種類のデータにも使えます。
たとえば、数字の入ったリスト:
numbers = [1, 2, 3, 2, 4, 1, 5]
unique_numbers = list(dict.fromkeys(numbers))
print(unique_numbers)
[1, 2, 3, 4, 5]
このように、どんなリストでも基本的には同じ方法で重複を削除できます。
6. 空リストや1つだけのリストも確認しよう
重複削除の処理は、空のリストや1つしか要素がないリストでも問題なく動きます。
たとえば:
empty_list = []
print(list(set(empty_list)))
one_item = ["あきこ"]
print(list(set(one_item)))
[]
['あきこ']
このように、特別なエラーもなく安全に使えるので、気軽に試してみてくださいね。
7. どの方法を使うべき?
状況によって、使い分けが必要です。以下のように考えると良いでしょう。
- 順番を気にしない →
set() - 順番を保ちたい →
dict.fromkeys() - 仕組みを理解したい →
for文で実装
どの方法もPython初心者にとって大切な学びになるので、実際にコードを書いて動かしてみるのがおすすめです。
まとめ
Pythonのリストから重複を削除する方法について学んできた内容をふりかえると、日常的に扱うデータの整理に役立つ知識が多く含まれていることが実感できます。たとえば、名簿や商品一覧、入力された値の履歴など、同じ情報が何度も繰り返される場面はプログラミングの学習でも実務でもよくあります。そんなときに、適切な方法で重複を取り除くことは、データを正しく扱ううえでとても重要です。
今回の記事では、順番を気にしない場合のset()、順序を保ったまま重複を除去できるdict.fromkeys()、そして基本構文の理解を深められるfor文による実装まで、三つの視点から重複削除の手法を学びました。それぞれの方法には特徴があり、用途や状況に合わせて使い分けることが大切です。特に、順番を崩したくないケースではdict.fromkeys()が便利であり、Python初心者にとっても扱いやすい方法と言えます。
重複削除の処理は、文字列だけでなく数字や他のデータ型にも応用でき、実際のプログラム作成においてもそのまま活用できます。また、空のリストや一つだけの要素を持つリストにも安全に適用できるため、初心者でも安心して試すことができます。こうした柔軟性の高さは、Pythonが多くの人に支持されている理由のひとつでしょう。
以下には、今回学んだ内容をふまえた応用的なサンプルプログラムを示しています。複数の方法を組み合わせて、さらに理解を深められるよう構成していますので、実際に試して結果を確認しながら理解を深めてみてください。
サンプルプログラム(応用例)
names = ["たろう", "はなこ", "たろう", "じろう", "はなこ", "さくら", "じろう"]
# set()で重複削除
unique_set = list(set(names))
# dict.fromkeys()で順序を保ちつつ重複削除
unique_ordered = list(dict.fromkeys(names))
# for文で自作の重複削除
unique_manual = []
for n in names:
if n not in unique_manual:
unique_manual.append(n)
print("set()を使った結果:", unique_set)
print("順序を保った結果:", unique_ordered)
print("手作業で重複削除:", unique_manual)
こうして三つの方法を並べて出力すると、結果の違いや特徴がより分かりやすくなります。同じ目的を達成するためにも、方針を変えることでコードの読みやすさや扱いやすさが変化する点は、Python学習において大きな学びとなるでしょう。どれか一つの方法にこだわるのではなく、状況に応じた最適な手段を選ぶ力を身につけることで、プログラム全体の品質も向上していきます。 また、順番を保ちながら重複を取り除きたいときには、辞書の特性を利用するというPythonらしい発想が非常に便利であり、データを整理する処理をより効率的に行うことができます。こうしたテクニックは、実務や学習で扱うあらゆるデータ処理に応用できるため、今後のプログラミングにも大いに役立つでしょう。
生徒
「今日学んだ方法を試してみたら、リストがすごくきれいに整理できてびっくりしました!特にdict.fromkeys()で順番が保たれるのがありがたいです。」
先生
「それはよかったですね。順番を意識した重複削除は実際のプログラムでもよく使いますし、辞書の特性を知ることでPythonへの理解もぐっと深まりますよ。」
生徒
「for文で自分で重複を取り除く方法も試したんですけど、仕組みが分かって面白かったです。こういう基本構文は繰り返し練習したくなりますね!」
先生
「とても良い姿勢です。便利な関数を使うだけでなく、自分で処理を書いてみることで、リストの扱いや条件分岐の理解にもつながります。実際に手を動かすことが何より大切ですよ。」
生徒
「はい!今回学んだ三つの方法を状況によって使い分けられるように、これからもたくさん練習していきます!」