Python リスト内の重複要素を削除
この章では、リストから重複要素を削除する方法を学びます。
知識ポイントは以下のとおりです。
-
Python 集合:集合(set)は、順序のない重複しない要素のシーケンスです。
-
Python リスト:リストは、データ項目から構成される有限のシーケンスであり、一定の線形順序に従って配置されたデータ項目の集合です。このデータ構造に対する基本操作には、要素の検索、挿入、削除が含まれます。
実例
list_1 = [1, 2, 1, 4, 6]
print(list(set(list_1)))
print(list(set(list_1)))
上記のコードを実行すると、出力結果は次のようになります。
[1, 2, 4, 6]
上記の実例では、まずリストを集合に変換し、再度リストに変換しています。集合には重複要素を含めることができないため、set() が重複要素を削除します。
元のリストの要素の順序を保持する必要がある場合は、補助集合を使用してすでに出現した要素を追跡し、新しいリストを構築することができます。
実例
# 補助集合を使用して順序を保ちながら重複を除去
def remove_duplicates(lst):
seen = set()
unique_list = []
for item in lst:
if item not in seen:
seen.add(item)
unique_list.append(item)
return unique_list
# 例
original_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = remove_duplicates(original_list)
print(unique_list) # 出力: [1, 2, 3, 4, 5]
def remove_duplicates(lst):
seen = set()
unique_list = []
for item in lst:
if item not in seen:
seen.add(item)
unique_list.append(item)
return unique_list
# 例
original_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = remove_duplicates(original_list)
print(unique_list) # 出力: [1, 2, 3, 4, 5]
dict.fromkeys() を使用
dict.fromkeys() メソッドは、重複を除去し順序を保持するためにも使用できます。これは、辞書が Python 3.7 以降で挿入順序を保持するためです。
実例
# dict.fromkeys() を使用して順序を保ちながら重複を除去
def remove_duplicates(lst):
return list(dict.fromkeys(lst))
# 例
original_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = remove_duplicates(original_list)
print(unique_list) # 出力: [1, 2, 3, 4, 5]
def remove_duplicates(lst):
return list(dict.fromkeys(lst))
# 例
original_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = remove_duplicates(original_list)
print(unique_list) # 出力: [1, 2, 3, 4, 5]
上記のコードを実行すると、出力結果は次のようになります。
[1, 2, 3, 4, 5]
リスト内包表記を使用
リスト内包表記に条件判断を組み合わせることで、重複除去機能を実現することもできます。
実例
# リスト内包表記を使用して重複を除去
def remove_duplicates(lst):
unique_list = []
[unique_list.append(item) for item in lst if item not in unique_list]
return unique_list
# 例
original_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = remove_duplicates(original_list)
print(unique_list) # 出力: [1, 2, 3, 4, 5]
def remove_duplicates(lst):
unique_list = []
[unique_list.append(item) for item in lst if item not in unique_list]
return unique_list
# 例
original_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = remove_duplicates(original_list)
print(unique_list) # 出力: [1, 2, 3, 4, 5]
2つのリストで重複する要素を削除
以下の実例では、2つのリストに同時に存在する要素が削除されます。
実例
list_1 = [1, 2, 1, 4, 6]
list_2 = [7, 8, 2, 1]
print(list(set(list_1) ^ set(list_2)))
list_2 = [7, 8, 2, 1]
print(list(set(list_1) ^ set(list_2)))
まず、set() を使用して2つのリストを2つの集合に変換し、リスト内の重複要素を削除します。
次に、^演算子を使用して、2つのリストの対称差を取得します。
上記のコードを実行すると、出力結果は次のようになります。
[4, 6, 7, 8]
まず、2つのリストを2つの集合に変換して、各リストから重複項目を削除します。
次に、^を使用して、2つのリストの対称差(2つの集合の重複要素を除外したもの)を取得します。
その他の拡張
Python3 実例