46

最近、次のように 2 つの整数リストを直接比較しているコードに気付きました。

a = [10,3,5, ...]
b = [5,4,3, ...,]
if a > b:
     ...

これは少し奇妙に思えましたがTrue、すべてのlist_aの要素が の要素よりも大きい場合は返されlist_b、各要素が等しい場合、またはlist_bの要素が の要素よりも大きい場合は False が返されると想像しましたlist_a。だから私はそれをテストしました:

>>> a=[3,3,3,3]
>>> b=[4,4,4,4]
>>> a>b
False
>>> b>a
True

わかりました。同様に:

>>> b = [1,1,1,1]
>>> a = [1,1,1,1]
>>> a>b
False
>>> b>a
False

しかし、それがより曖昧になると:

>>> a=[1,1,3,1]
>>> b=[1,3,1,1]
>>> a>b
False
>>> b>a
True

また:

>>> a=[1,3,1,1]
>>> b=[1,1,3,3]
>>> a>b
True
>>> b>a
False

結果は少し奇妙です。Pythonは実際に何をしていますか?左端の要素が対応する要素よりも大きい最初のリストを優先して結果を返しているようです。

4

3 に答える 3

55

Pythonチュートリアルのシーケンスとその他のタイプの比較から:

比較には辞書式の順序付けが使用されます。最初に最初の 2 つの項目が比較され、それらが異なる場合は比較の結果が決まります。等しい場合は、次の 2 つの項目が比較され、いずれかのシーケンスが使い果たされるまで続きます。

辞書編集順序に関するウィキペディアの記事も参照してください。

于 2012-10-24T15:54:27.593 に答える