Pythonでリストから重複する要素を抽出して表示する方法
この記事では、数値のリストの中から重複している要素(2回以上出現する、リスト内で一意ではない要素)をすべて抽出して表示するPythonプログラムを解説します。
実行例
入力: given_list = [3, 6, 9, 12, 3, 30, 15, 9, 45, 36, 12] 出力: desired_output = [3, 9, 12] 入力: given_list = [-27, 4, 29, -27, -2, -99, 123, 499, -99] 出力: desired_output = [-27, -99]
負の数値が含まれる場合でも正しく動作することがわかります。
重複要素を検出する基本のコード
以下は、指定されたリストから重複する要素を見つけ出すコードです。
lst = [3, 6, 9, 12, 3, 30, 15, 9, 45, 36, 12, 12]
dupItems = []
uniqItems = {}
for x in lst:
if x not in uniqItems:
uniqItems[x] = 1
else:
if uniqItems[x] == 1:
dupItems.append(x)
uniqItems[x] += 1
print(dupItems)実行結果
[3, 9, 12]
コードの仕組み
このプログラムでは、辞書uniqItemsを使って各要素の出現回数を記録しています。処理の流れは次のとおりです。
初めて登場した要素は辞書に登録され、出現回数が1に設定されます。同じ要素が再び現れたとき、まだdupItemsに追加されていなければ(出現回数がちょうど1のとき)リストに追加し、その後カウントを増やしていきます。これにより、たとえ3回以上出現する要素でも、重複リストには1度だけ登録されるようになっています。
collections.Counterを使った別の方法
標準ライブラリのcollections.Counterを使うと、より簡潔に記述できます。
from collections import Counter lst = [3, 6, 9, 12, 3, 30, 15, 9, 45, 36, 12] dupItems = [item for item, count in Counter(lst).items() if count > 1] print(dupItems)
実行結果
[3, 9, 12]
文字列のリストにも対応
これらのプログラムは整数のリストに限らず、文字列など他のデータ型のリストにもそのまま適用できます。
入力: given_list = ['abc', 'def', 'raj', 'zack', 'abc', 'raj'] 出力: output_returned = ['abc', 'raj']
状況に応じて、シンプルな辞書ベースの方法か、Counterを使った読みやすい方法を選択するとよいでしょう。
-
Pythonでリストから重複要素を削除する方法を徹底解説
重複した要素を含むリストが与えられたとき、重複を取り除いた新しいリストを作成するのが本記事のテーマです。初心者の方にも理解しやすいよう、基本的なアルゴリズムの手順から実際のコードまで順を追って解説していきます。 実行例 入力::[2,3,4,3,4,6,78,90] 出力::[2,3,4,6,78,90] アルゴリズム 重複要素を削除するための基本的な手順は以下の通りです。 元となるリストを作成する。 空の新しいリストを用意する。 元のリストの各要素を先頭から順番に走査する。 その要素が新しいリストにまだ存在しないかどうかを判定する。 存在しない場合のみ、新しいリストへ要素を追加する。
-
Pythonでリストのすべてのサブリストを生成して出力する方法
リストが与えられたとき、そのリストに含まれるすべてのサブリスト(部分リスト)を生成して出力するプログラムを紹介します。要素数 n のリストの場合、空のリストを含めるとサブリストの総数は n×(n+1)/2+1 個になります。 実行例 入力 : list = [1, 2, 3] 出力 : [], [1], [1, 2], [1, 2, 3], [2], [2, 3], [3] アルゴリズム 考え方はシンプルです。開始位置 i と終了位置 j の組み合わせをすべて試し、スライスで部分リストを取り出します。 ステップ1 : 対象となるリストを用意します。 ステップ2 : 結果を格納するため、最