配列処理

[Python] list(配列)から重複を削除する方法

今回は、Pythonでlist(配列)から重複を削除する方法についてご紹介します。

リストの重複を削除するメリット

リストから重複を削除すると、データの冗長性を減らし、メモリ使用量を抑えられます。

また、同じ要素を何度も処理しなくて済むため、計算効率が向上する場合があります。

用途によっては重複が問題とならないケースもありますが、重複のないクリーンなデータを扱うことで可読性が高まり、保守性も向上します。

Pythonでリストの重複を削除する3つの方法

ここでは主に、以下の3通りのアプローチを紹介します。

  • setを使う方法
  • dict.fromkeys()を使う方法
  • ループと条件判定を使う方法

1. setを使う方法

最もシンプルなやり方は、リストをset(集合)に変換してからリストに戻す方法です。

ただし、setは順序を保持しないため、元の並びが重要な場合は注意が必要です。

実行結果
[1, 2, 3, 4, 5, 6, 9]

2. dict.fromkeys()を使う方法

Python 3.7以降の辞書は挿入順を保持します。

その性質を利用し、dict.fromkeys()でキーにして重複を削除すると、元のリストの順序を保ったまま重複除去が可能です。

実行結果

[‘apple’, ‘banana’, ‘orange’, ‘grape’]

3. ループと条件判定を使う方法

要素を順番に確認し、まだ追加していない要素だけを新しいリストに加える方法です。

順序を保持したい時に有効ですが、リストが大きくなるほどin演算子による検索のコストが高くなるため、パフォーマンスに注意してください。

実行結果

[10, ‘hello’, 3.14, 7]

よくあるエラーと対処法

重複を削除する際に直面しやすいエラーの例をいくつか紹介します。

  • TypeError: unhashable type: ‘list’

    setやdictのキーにできるのは「ハッシュ可能なオブジェクト」に限られます。リストや辞書など変更可能な型は含めることができません。要素にリストが含まれている場合、setやdict.fromkeys()は使えないので、別の方法が必要です。

  • パフォーマンスの低下

    ループでリストの重複を判定する方法は、要素数が多いと処理が遅くなる可能性があります。高速化したい場合はsetやdictを活用しましょう。

まとめ

Pythonでリストの重複を削除する方法は、目的や元のリストの要件(順序を維持するかどうかなど)によって選び分けるのがポイントです。

setを使う方法、dict.fromkeys()を使う方法、ループでの方法のいずれも、扱うデータの性質とパフォーマンスを考慮して選択してください。

適切な手段を使いこなすことで、コードをより効率的かつ簡潔に保つことができます。