Pythonで2つのリストの要素を比較する方法|cmp()関数の使い方と注意点
Python 2では、cmp()関数を使うことで、2つのリストの要素を比較することができます。この関数は、両方の要素が同じ型であればそのまま比較を実行し、その結果を返します。要素の型が異なる場合は、まずそれらが数値かどうかを確認し、どちらも数値であれば必要に応じて型変換(型強制)を行った上で比較します。
片方の要素だけが数値である場合、もう一方の要素の方が「大きい」とみなされます(数値は他のすべての型よりも「小さい」と扱われるためです)。それ以外の場合は、型名をアルファベット順に並べた順序で比較されます。
さらに、どちらか一方のリストの末尾に先に達した場合には、より長いリストが「大きい」と判断されます。両方のリストを使い切り、かつ内容が完全に一致していた場合には引き分けとなり、0が返されます。
戻り値のルールまとめ
- list1 が list2 より小さい場合:負の値(例:-1)
- list1 が list2 より大きい場合:正の値(例:1)
- 両者が等しい場合:0
使用例
list1 = [123, 'xyz']
list2 = [456, 'abc']
print(cmp(list1, list2))
print(cmp(list2, list1))
list2 = [123, 'xyz']
print(cmp(list1, list2))
出力結果
上記のコードを実行すると、次のような出力が得られます。
-1
1
0
注意点:Python 3ではcmp()は使えない
cmp()はPython 2専用の組み込み関数であり、Python 3では削除されています。Python 3で同様の比較を行いたい場合は、次のような方法が利用できます。
# 演算子による直接比較
print(list1 == list2)
print(list1 < list2)
# 要素ごとに比較したい場合
import operator
result = list(map(operator.eq, list1, list2))
Python 3では、リスト同士を == や < などの比較演算子で直接比較できるため、多くの場面でcmp()の代わりとして活用できます。用途に応じて適切な方法を選びましょう。
-
【Python】difflibを使って2つのファイルの差分を行単位で比較する方法
はじめに Pythonの標準ライブラリには、文字列やファイル間の差分(diff)を検出するために特化したモジュール「difflib」が用意されています。このモジュールの unified_diff 関数を呼び出すだけで、2つのファイルの内容を簡単に比較できます。 例として、以下のような内容を持つ2つのファイル file1 と file2 を考えてみましょう。 file1: Hello People of the world file2: Hello People from India サンプルコード これらのファイルの差分を取得するには、次のようなコードを使用します。 import diffl
-
Pythonで2つの辞書リストを比較する方法|差分の出力とPandas活用術
この記事では、Pythonで2つの「辞書のリスト」を比較し、両者の差分を出力する方法を解説します。 ここで紹介する比較方法では、辞書内のキーと値の両方が比較対象になります。 また、Pythonで辞書のリスト同士を比較する場合、要素の並び順は結果に影響しません。キーと値の組み合わせが同じであれば、順序が異なっていても等しいものとして扱われます。 Pythonで辞書のリストを比較する基本方法 if __name__ == __main__: list_1 = [ {id: 123-abc, name: Mike, age: 40}, {name: John