Python でリストから重複を削除する方法

順序を維持または無視しながら、Python でリストから重複を削除する方法を学びます。セット変換、辞書キー、ループ メソッドを比較します。

エディターでこのソリューションを試してください

概要

重複データは、データベースの取得、ユーザー操作、またはログ集計を通じて頻繁にリストに入り込みます。これらの重複を削除することは、一意性を確保し、ダウンストリーム ロジックの冗長性を防ぐための基本的なデータ クレンジング手順です。 Python は、高速なセット変換から要素の順序を考慮したループベースの操作まで、これを実現するためのいくつかの手法を提供します。

重複要素を削除する最も速く最も一般的な方法は、`set()` コンストラクターを使用してリストを `set` に変換し、それからそれをリストに戻すことです。セットには重複した値を含めることはできないため、このプロセスでは重複した値が自動的に破棄されます。このアプローチの欠点は、セットに順序がないこと、つまり要素の元の順序が失われることです。

重複を削除しながら要素の元の順序を保持するために、Python 3.7+ は組み込み辞書クラス `list(dict.fromkeys(my_list))` を使用する賢いソリューションを提供します。辞書キーは一意であり、挿入順序が保持されるため、この方法ではシーケンスをそのまま維持しながら効果的に要素の重複を排除します。カスタム基準または古いバージョンの Python の場合、ヘルパー セットを使用して、表示された要素を追跡する手動ループも非常に効果的です。

コードと実行の出力

このスクリプトは、セット、辞書キー、および手動ループを使用してリスト要素を重複排除する方法を示します。

numbers = [2, 1, 2, 3, 1, 4]

# Method 1: Using set() (Unordered)
unique_unordered = list(set(numbers))
print("Unordered unique:", unique_unordered)

# Method 2: Using dict.fromkeys() (Preserves order)
unique_ordered = list(dict.fromkeys(numbers))
print("Ordered unique:", unique_ordered)

# Method 3: Using a loop with a seen helper
seen = set()
unique_loop = []
for item in numbers:
    if item not in seen:
        seen.add(item)
        unique_loop.append(item)
print("Loop unique:", unique_loop)
端子出力
Unordered unique: [1, 2, 3, 4]
Ordered unique: [2, 1, 3, 4]
Loop unique: [2, 1, 3, 4]

段階的な実装

  • set(my_list) を使用してリストをセットに変換し、重複を即座に削除します。
  • list(dict.fromkeys(my_list)) を使用して、挿入順序を維持しながら重複を削除します。
  • カスタム検証が必要な場合は、ループ内でヘルパー セットを使用して重複を除外します。

よくある質問

大きなリストの場合、どの方法が最も速いですか?

C レベルの最適化によりセットへの変換が最も速く、次に dict.fromkeys() が続きます。

辞書のリストの重複を削除するにはどうすればよいですか?

辞書はハッシュ化できないため、セットを直接使用することはできません。一意の ID/キーによるループまたはリストの内包表記フィルタリングを使用する必要があります。

関連トピック

推奨される Python リソース

関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。