python リストから重複する要素を削除する

python Python

setを使う

setを使うとリストから簡単に重複を削除できます。set(集合)は重複する要素をもたない、順序づけられていない要素の集まりです。

C#
original_list = [7, 1, 3, 5, 2, 4, 12, 4, 2, 3]
print(set(original_list))   
# {1, 2, 3, 4, 5, 7, 12}
unique_list = list(set(original_list))  
print(unique_list)  
# [1, 2, 3, 4, 5, 7, 12]

最初に集合を排除したset(集合)を作って、そのsetからリストを作成します。
このやり方では、setが内部的にハッシュ順で出力を行うため、結果的に元のリストの順序は壊れてしまいます。

dictを使う

オリジナルのリストの順序に意味がある場合には、次のようにすれば順序は保持されます。

C#
original_list = [7, 1, 3, 5, 2, 4, 12, 4, 2, 3]
tmp = dict.fromkeys(original_list)  
# {7: None, 3: None, 2: None, 5: None, 8: None, 6: None}
print(list(tmp))  
# [7, 1, 3, 5, 2, 4, 12]

dictは挿入順を保持する仕様になったので、いったん元のリストから重複を除いたものをキーとして持ち、値はすべてNoneのdictを作成しておいて、それをリストに戻す、ということをやると、元の順序を保ちながら重複を削除したリストが作れます。

リストをループする

あるいは、愚直に元のリストをループして重複を排除しながら新しいリストを作成することもできます。

C#
original_list = [7, 1, 3, 5, 2, 4, 12, 4, 2, 3]
unique_list = []
for item in original_list:
    if item not in unique_list:
        unique_list.append(item)
print(unique_list)
# [7, 1, 3, 5, 2, 4, 12]

やや面倒で強引だが愚直でわかりやすいと思います。

コメント

タイトルとURLをコピーしました