Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで重複を含む2つのリストの差分を求める方法

プログラミングをしていると、2つのリストの差分(違い)を求めたい場面によく出会います。これは数学的な減算に相当し、第1のリストから、第2のリストにも存在する要素を取り除く処理を意味します。重要なのは、重複する要素も保持したまま計算できるという点です。

このような処理には、Pythonの標準ライブラリ collections モジュールが提供する Counter クラスを利用すると便利です。Counter は各要素の出現回数を自動的に追跡してくれるため、単純な減算(- 演算子)だけで期待通りの結果が得られます。

最終的な結果では、各要素について「第1のリストでの出現回数」から「第2のリストでの出現回数」を引いた残りが、差分リストの要素として反映されます。例えば、ある要素が第1のリストに3回、第2のリストに1回現れる場合、結果にはその要素が2回含まれることになります。

サンプルコード

from collections import Counter

# リストの初期化
listA = ['Mon', 'Tue', 9, 3, 3]
listB = ['Mon', 3]

# 元のリストを表示
print("Given ListA : ",listA)
print("Given ListB : ",listB)

# collections.Counter() を適用
diff_list = list((Counter(listA) - Counter(listB)).elements())

# 結果を表示
print("Result of list subtraction : ",diff_list)

実行結果

上記のコードを実行すると、以下のような出力が得られます。

Given ListA : ['Mon', 'Tue', 9, 3, 3]
Given ListB : ['Mon', 3]
Result of list subtraction : ['Tue', 9, 3]

コードの解説

  • Counter(listA) - Counter(listB):それぞれのリストをカウントオブジェクトに変換し、要素ごとの出現回数を引き算します。この際、負の値になる要素は自動的に除外されます。
  • .elements():減算後のカウントに基づいて、実際の要素を出現回数分だけ展開します。
  • list(...):イテレータとして返される結果をリスト形式に変換しています。

この方法を使えば、単純な集合演算では失われてしまう重複情報も正確に扱えるため、リスト間の差分計算が必要なさまざまなシーンで活用できます。

  1. Pythonでリストを定義する方法とは?基本の書き方を初心者向けに解説

    リスト(List)は、Pythonにおける基本的なシーケンス型データ構造の一つです。複数の要素を角括弧 [ ] で囲み、カンマで区切って表現します。各要素は文字列や数値など異なるデータ型が混在していても問題ありません。また、リストは順序付き(ordered)コレクションであるため、格納した要素の並び順は保持されます。個々の要素には、0から始まるインデックスを使ってアクセスできます。たとえば最初の要素はインデックス 0、2番目の要素は 1 で参照します。リストの定義例list1 = [physics, chemistry, 1997, 2000] list2 = [1, 2, 3, 4, 5]

  2. Pythonリスト入門:作成から操作、削除まで徹底解説

    このチュートリアルでは、Pythonのリスト(List)について学びます。リストの作成方法、要素へのアクセス、要素の追加・削除、リスト自体の削除など、基本的な操作を一つずつ丁寧に解説していきます。 Pythonでは、リストは角括弧 [] を使って構築し、各要素はカンマ , で区切って記述します。 Pythonのリストは、異なる型のオブジェクトを混在させて格納できるのが特徴です。すべて文字列である必要も、整数である必要もありません。例えば、以下のように複数の型が混ざったリストを作成できます。mixedTypesList = [a, True, 1, 1.0] リストの作成方法 リストは、角括弧