【Python】リストの重複削除

【Python】リストの重複削除

Pythonでリストの重複を削除する方法について、複数のアプローチを解説します。それぞれの方法に特徴があり、状況に応じて使い分けることが重要です。

setを使った重複削除

Pythonのset型は重複を許さない特性があるため、リストの重複削除に利用できます。

example_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = list(set(example_list))
print(unique_list)  # 出力例: [1, 2, 3, 4, 5]

注意点: setは要素の順序を保持しないため、結果の順序が元のリストと異なる場合があります。

dict.fromkeysを使った重複削除

辞書のfromkeysメソッドを使用すると、順序を保持しながら重複を削除できます。

example_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = list(dict.fromkeys(example_list))
print(unique_list)  # 出力例: [1, 2, 3, 4, 5]

ループを使った重複削除

手動でループを回して重複を削除する方法もあります。この方法では順序が保持されます。

example_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = []
for item in example_list:
    if item not in unique_list:
        unique_list.append(item)
print(unique_list)  # 出力例: [1, 2, 3, 4, 5]

この方法はsetやdict.fromkeysよりも処理速度が遅くなる場合があります。

pandasを使った重複削除

pandasライブラリを使用すると、データフレームだけでなくリストの重複削除も簡単に行えます。

import pandas as pd

example_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = pd.unique(example_list).tolist()
print(unique_list)  # 出力例: [1, 2, 3, 4, 5]

順序を保ちながら重複を削除する

順序を保ちながら重複削除する場合、setを併用することもできます。

example_list = [1, 2, 2, 3, 4, 4, 5]
seen = set()
unique_list = [x for x in example_list if not (x in seen or seen.add(x))]
print(unique_list)  # 出力例: [1, 2, 3, 4, 5]

ポイント: この方法はリスト内包表記を活用した簡潔な書き方です。

大文字小文字を区別せずに重複削除

文字列リストで大文字小文字を区別せずに重複を削除したい場合、比較用の基準を工夫します。

example_list = ["Python", "python", "PYTHON", "java", "Java"]
unique_list = []
seen = set()
for item in example_list:
    lower_item = item.lower()
    if lower_item not in seen:
        unique_list.append(item)
        seen.add(lower_item)
print(unique_list)  # 出力例: ['Python', 'java']

複雑なオブジェクトの重複削除

辞書やカスタムクラスのオブジェクトが含まれるリストから重複を削除するには、ユニーク性を判定する基準を指定します。

example_list = [{"id": 1}, {"id": 2}, {"id": 1}, {"id": 3}]
unique_list = []
seen_ids = set()
for obj in example_list:
    if obj["id"] not in seen_ids:
        unique_list.append(obj)
        seen_ids.add(obj["id"])
print(unique_list)  # 出力例: [{'id': 1}, {'id': 2}, {'id': 3}]

この例では、各辞書のidキーを基準にしています。

まとめ

Pythonでリストの重複を削除する方法には多くの選択肢があります。それぞれの方法を理解し、用途に応じて最適な方法を選びましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です