Pythonで別のリストの重複要素に対応するインデックスを削除する方法
あるリスト内の重複する要素に対応するインデックスの項目を、別のリストから取り除きたい場面では、enumerate 関数・リスト内包表記・シンプルな反復処理を組み合わせるのが効果的です。
本記事では、2つの整数リストを例に、片方のリストで重複している要素のインデックスを検出し、もう一方のリストから該当する要素を削除する方法を、サンプルコードと実行結果付きで解説します。
サンプルコード
以下が実際のコード例です。
my_list_1 = [4, 5, 6, 5, 4, 7, 8, 6]
my_list_2 = [1, 7, 6, 4, 7, 9, 10, 11]
print("The first list is :")
print(my_list_1)
print("The second list is :")
print(my_list_2)
temp_set = set()
temp = []
for index, value in enumerate(my_list_1):
if value not in temp_set:
temp_set.add(value)
else:
temp.append(index)
my_result = [element for index, element in enumerate(my_list_2) if index not in temp]
print("The result is :")
print(my_result)
実行結果
The first list is : [4, 5, 6, 5, 4, 7, 8, 6] The second list is : [1, 7, 6, 4, 7, 9, 10, 11] The result is : [1, 7, 6, 9, 10]
コードの解説
- 整数のリストが2つ定義され、それぞれコンソールに表示されます。
- 重複判定に使用する空のセット
temp_setと、重複要素のインデックスを格納するための空のリストtempを作成します。 enumerate関数で最初のリストをインデックス付きで走査し、各要素の値がすでにセットに存在するかどうかを確認します。- 値が未登録の場合はセットに追加し、すでに登録済み(=重複)であれば、そのインデックスをリスト
tempに記録します。 - 続いてリスト内包表記により2番目のリストを走査し、インデックスが
tempに含まれていない要素のみを抽出して新しいリストを生成します。 - 最終的な結果は変数
my_resultに代入され、コンソールに出力されます。
処理のポイント
セットによる存在確認は平均的に O(1) の計算量で実行できるため、大量のデータでも高速に重複検出が可能です。また、リスト内包表記を活用することで、フィルタリング処理を簡潔で読みやすい形に記述できます。この手法は、データクレンジングや前処理など、リスト間で位置関係を保ったまま不要な要素を除去したいケースで特に役立ちます。
-
Pythonで別のリストのインデックスを指定してリストから要素を削除する方法
Pythonでインデックスリストに基づいてリストの要素を削除する方法ここでは2つのリストを扱います。L1は要素を削除する対象となるリストオブジェクト、L2は削除したい要素のインデックスを格納したリストです。>>> L1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]>>> L2 = [2, 4, 6]L2で指定されたインデックスにある要素をL1から取り除くには、まずL1からenumerateオブジェクトを作成します。enumerate()関数は、リスト内の各要素とそのインデックスをペアにしたタプルのコレクション(enumerateオブジェクト)を
-
Pythonでインデックスを指定してリストから要素を削除する方法
Pythonでリストからインデックスを指定して要素を削除するには、主に2つの方法があります。del文を使う方法と、pop()メソッドを使う方法です。 del文で要素を削除する del文は、削除したい要素のインデックスを指定して使用します。指定した位置の要素がリストから取り除かれます。 >>> L1=[11,22,33,44,55,66,77] >>> del L1[2] >>> L1 [11, 22, 44, 55, 66, 77] 上記の例では、インデックス2(3番目の要素「33」)が削除され、リストの要素数が1つ減っています。del文は