Pythonで2つのリストを比較する方法をわかりやすく解説
Pythonにおけるリストは、同種の要素をまとめて扱うためのコレクションです。プログラミングの現場では、2つのリストに格納されたデータを比較して、何らかの処理を行いたい場面が少なくありません。本記事では、Pythonで2つのリストを比較するための代表的な方法を、要素の順序を考慮する場合としない場合の両方に分けて詳しく解説します。
list.sort()と==演算子を使う方法
list.sort()メソッドで両方のリストをあらかじめソートしておき、その後==演算子で要素を1つずつ比較します。同じ位置に同じ値が並んでいれば「等しい」と判定されます。この方法では要素の順序が結果に影響しないため、[1, 2, 3]と[2, 1, 3]も「等しい」リストとして扱われます。
サンプルコード
def compareList(l1, l2):
l1.sort()
l2.sort()
if(l1 == l2):
return "Equal"
else:
return "Non equal"
l1 = [1, 2, 3]
l2 = [2, 1, 3]
print("First comparison", compareList(l1, l2))
l3 = [1, 2, 3]
l4 = [1, 2, 4]
print("Second comparison", compareList(l3, l4))実行結果
First comparison Equal Second comparison Non equal
collections.Counter()を使う方法
collectionsモジュールのCounterクラスを使うと、各要素の出現回数(頻度)をカウントして比較できます。1つ目のリストと2つ目のリストで各要素の頻度がすべて一致していれば「等しい」と判定されます。この方法でも要素の順序は考慮されません。
サンプルコード
import collections
def compareList(l1, l2):
if(collections.Counter(l1) == collections.Counter(l2)):
return "Equal"
else:
return "Non equal"
l1 = [1, 2, 3]
l2 = [2, 1, 3]
print("First comparison", compareList(l1, l2))
l3 = [1, 2, 3]
l4 = [1, 2, 4]
print("Second comparison", compareList(l3, l4))実行結果
First comparison Equal Second comparison Non equal
sum()・zip()・len()を組み合わせる方法
この方法では、まずzip()で2つのリストから対応する要素をペアとして取り出し、一致している要素の数をsum()で合計します。その合計値がリストの長さ(len())と一致すれば「等しい」と判定します。計算を実行する前に、必ず両リストの長さが等しいことを確認しておく必要があります。
なお、この方法では要素の順序もチェックされます。そのため、[1, 2, 3]と[2, 1, 3]は「等しくない」と判定されます。
サンプルコード
def compareList(l1, l2):
if(len(l1) == len(l2) and len(l1) == sum([1 for i, j in zip(l1, l2) if i == j])):
return "Equal"
else:
return "Non equal"
l1 = [1, 2, 3]
l2 = [2, 1, 3]
print("First comparison", compareList(l1, l2))
l3 = [1, 2, 3]
l4 = [1, 2, 3]
print("Second comparison", compareList(l3, l4))実行結果
First comparison Non equal Second comparison Equal
上記の例では、最初の比較において両リストのデータ項目自体は同じですが、要素の並び順が異なるため「等しくない」と判定されています。
==演算子のみを使う方法
これは最初の方法の応用形です。ソートを行わずにリスト同士を直接比較するため、要素の順序まで含めた厳密な比較が可能です。
サンプルコード
def compareList(l1, l2):
if(l1 == l2):
return "Equal"
else:
return "Non equal"
l1 = [1, 2, 3]
l2 = [2, 1, 3]
print("First comparison", compareList(l1, l2))
l3 = [1, 2, 3]
l4 = [1, 2, 3]
print("Second comparison", compareList(l3, l4))実行結果
First comparison Non equal Second comparison Equal
まとめ
Pythonでリストを比較する方法は複数あり、「要素の順序を考慮するかどうか」によって使い分けることが重要です。順序を無視して内容だけを比べたい場合はsort()やcollections.Counter()が便利で、順序も含めて厳密に比較したい場合は==演算子やzip()を活用した方法が適しています。用途に応じて最適な手法を選択しましょう。
-
Pythonで2つの辞書リストを比較する方法|差分の出力とPandas活用術
この記事では、Pythonで2つの「辞書のリスト」を比較し、両者の差分を出力する方法を解説します。 ここで紹介する比較方法では、辞書内のキーと値の両方が比較対象になります。 また、Pythonで辞書のリスト同士を比較する場合、要素の並び順は結果に影響しません。キーと値の組み合わせが同じであれば、順序が異なっていても等しいものとして扱われます。 Pythonで辞書のリストを比較する基本方法 if __name__ == __main__: list_1 = [ {id: 123-abc, name: Mike, age: 40}, {name: John
-
Excelで2つの列やリストを比較する方法|初心者にもわかる4つの基本テクニック
Excelで作業をしていると、2つ以上の列の一致や相違を確認したい場面によく出くわします。列同士の比較自体は難しくありませんが、方法が多数あるため、どれを選べばよいか迷ってしまうこともあるでしょう。この記事では、Excelで列を照合・比較するためのさまざまなテクニックを、具体例とともにわかりやすく解説します。 Excelで2つの列またはリストを比較する4つの方法 ここでは、スーパーマーケットの2つのショールームの商品名が入力された2列のデータセットを用意しました。この2つのショールームのデータを比較していきます。 方法1:等号演算子(=)を使って2つの列を比較する まずは、等号(=)を使って