Python – K番目の列要素が重複する行を削除する方法
リストの中に、特定の列(K番目の要素)が同じ値を持つ行が複数含まれている場合、それらの重複行を削除したいことがあります。Pythonでは、シンプルな反復処理とappendメソッドを組み合わせることで、この処理を簡単に実現できます。
サンプルコード
以下に具体的な実装例を示します。
my_list = [[45, 95, 26], [70, 35, 74], [87, 65, 23], [70, 35, 74], [67, 85, 12], [45, 65, 0]]
print("リストの内容:")
print(my_list)
K = 1
print("Kの値:")
print(K)
my_result = []
my_mem = []
for index in my_list:
if index[K] not in my_mem:
my_result.append(index)
my_mem.append(index[K])
print("処理後のリスト:")
print(my_result)
出力結果
リストの内容: [[45, 95, 26], [70, 35, 74], [87, 65, 23], [70, 35, 74], [67, 85, 12], [45, 65, 0]] Kの値: 1 処理後のリスト: [[45, 95, 26], [70, 35, 74], [87, 65, 23], [67, 85, 12]]
コードの解説
- まず、ネストされたリスト(リストのリスト)を定義し、その内容をコンソールに表示します。
- 次に、比較対象となる列のインデックスKを初期化し、コンソールに出力します。
- 重複除去後の行を格納するための空のリストと、すでに確認済みのK番目の要素を記録するための空のリストをそれぞれ用意します。
- 元のリストを反復処理し、各行のK番目の要素が記録用リストに存在しない場合のみ、その行を結果リストに追加するとともに、そのK番目の要素を記録用リストにも追加します。これにより、K番目の要素が重複する行は最初に出現したものだけが残ります。
- 最後に、重複が除去された結果のリストをコンソールに表示します。
補足:より効率的な方法
上記の方法では、in演算子によるリスト検索に線形時間 O(n) かかるため、データ量が多い場合はパフォーマンスが低下します。代わりにset(集合)を使うことで、より高速に処理できます。
my_result = []
seen = set()
for row in my_list:
if row[K] not in seen:
seen.add(row[K])
my_result.append(row)
セットへの追加・検索は平均 O(1) で動作するため、大規模なデータを扱う場合でも快適に動作します。用途やデータサイズに応じて、適切な方法を選択しましょう。
-
Pythonでリスト内の同じ要素を削除する方法【初心者向け解説】
問題の概要Pythonであるリスト(L1)から、別のリスト(L2)に含まれる共通の要素を削除したい場合、コードの書き方に少し注意が必要です。特によくあるミスとして、return文をforループの中に記述してしまうことが挙げられます。正しく動作するコード以下のコードでは、return文をforブロックの外側に移動しているのがポイントです。これにより、すべての要素のチェックが完了してから結果が返されます。また、最後のprint文では、誤字のある「remaove_new」ではなく、正しい関数名「remove_same」を呼び出すようにしましょう。def remove_same(L1, L2):
-
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文は