10

同じ長さの 2 つのリストを比較したい

a = [1, 3, 5, 7, 9]
b = [1, 2, 5, 7, 3]

nこの場合は になります。n = 2また、長さが等しくない場合はエラーを返します。これを行うpythonicの方法は何ですか?

4

3 に答える 3

21

これを行う最も簡単な方法はsum()組み込み式とジェネレーター式を使用することです。

def differences(a, b):
    if len(a) != len(b):
        raise ValueError("Lists of different length.")
    return sum(i != j for i, j in zip(a, b))

を使用してリストをまとめてループし、zip()それらを比較します。True == 1とのようにFalse == 0、これを合計して差の数を取得します。別のオプションは、ジェネレーター式の条件部分を使用することです。

sum(1 for i, j in zip(a, b) if i != j)

どちらかが読みやすいとは言えませんし、パフォーマンスに違いがあるとは思えません。

于 2013-02-16T20:10:31.357 に答える
1

長さが等しくない場合にもエラーを生成するワンライナーソリューション:

>>> sum(map(lambda x,y: bool(x-y),a,b))
2

次に、異なる長さの入力を試してください。

>>> sum(map(lambda x,y: bool(x-y),[1,2],[1]))
TypeError

仕組み: bool(x,y) は、要素が異なる場合に True を返します。次に、この関数を 2 つのリストにマップし、[False、True、False、True、False] のリストを取得します。
関数 map() に異なる長さのリストを入れると、TypeError が返されます

最後に、このブール値リストの関数 sum() は 2 を返します。

于 2013-02-16T20:27:00.070 に答える
-2

セットを使用できます。両方をセットにキャストしてから、2 つの違いを見つけます。例えば:

>>> a = [1,3,5,7,9]
>>> b = [1,2,5,7,2]
>>> len(set(a) -  set(b))
2

これは、最初に長さの違いをチェックする関数にまとめることができます。

于 2013-02-16T20:15:38.277 に答える