5

不等式演算子を使用してリストを比較するときの Python の動作を理解するのに問題があります。python3 コマンド ライン インタープリターを使用したスニペットを次に示します。

>>> [8] < [7]
False
>>> [8] < [9]
True
>>> [8, 6] < [9]
True
>>> [8, 6] < [9, 7]     
True                    # So far so good
>>> [8, 6] < [9, 5]     
True                    # Huh?

したがって、Python が並列インデックスを移動しているだけではないことは明らかです。このシナリオでは、Python がリストを「辞書順」に並べ替えるという情報をいくつか見つけました。これは、アルファベット順を意味すると思います。

したがって、リストがソートされてから並列に比較されるのではないかと考えましたが、これは次の例で反証されています。

>>> [1, 2, 3] < [3, 2, 1]
True

私の推測では、内部比較は [1, 2, 3] < [1, 2, 3] であり、1 < 1 は False、2 < 2 は False などであるため、False を返すはずでした.

どんな助けでも大歓迎です。

4

3 に答える 3

4

Python が行うことは、リストを並行して調べて、同じインデックスの要素を比較することです。等しくない要素を初めて検出すると、この結果が返されます。

単語を比較するのと同じです。

"Peter" > "Peer"

最初の 2 文字は同じですが、3 番目の文字は異なり、結果を示しています。これは (リストの場合) 文字の代わりにリスト要素を使用するだけで、紙の辞書で使用されるのと同じ手法です。

追加情報: (Padraic Cunningham の提案による): 1 つのリストが短く、すべての要素が短いリストのサイズまで同じである場合、長いリストは大きいと見なされます。これも通常の(紙の)辞書と同じです。

于 2015-06-21T11:56:54.883 に答える
3

明らかに、Python は並列インデックスを移動するだけではありません

はい、等しくない値を最初に見つけたときに停止します。これは確かに辞書順です。例の数字を文字に置き換え、リストを文字列に置き換えます。

"h" < "g" # False
"h" < "i" # True
"hf" < "i" # True
"hf" < "ig" # True
"hf" < "ie" # True - not huh, hf does come before ie alphabetically.
"abc" < "cba" # True
于 2015-06-21T11:50:36.373 に答える
2

それは実際には非常に理にかなっています。

比較は、単語を辞書順にソートする場合と同様に行われます。結局のところ、単語もリスト、つまり文字のリストです。

最初に最初の項目を検討します。1 つが小さい場合はシーケンス全体が小さくなり、等しい場合は 2 番目の項目に移動します。

明らかに、"az" が "bc" の前に、"100" が "90" の前に来るように、"86" は "95" の前に来ます。

詳細はこちら

于 2015-06-21T11:51:11.073 に答える