4

重複の可能性:
Python で使用される文字列比較手法

>>> "spam" < "bacon"
False
>>> "spam" < "SPAM"
False
>>> "spam" < "spamalot"
True
>>> "Spam" < "eggs"
True

質問:等しい長さの文字列を比較する方法。文字列が同じ長さでない場合はどうなりますか? また、"Spam" が "eggs" よりも短いのはなぜですか?

4

4 に答える 4

3

辞書的に。

最初のバイトが比較され、最初のバイトの序数値が 2 番目のバイトよりも小さい場合は小さいです。それ以上なら大きい。それらが同じ場合、次のバイトが試されます。それがすべてネクタイで、一方が長い場合、短い方が小さくなります。

>>> "a" < "zzz"
True
>>> "aaa" < "z"
True
>>> "b" < "a"
False
>>> "abc" < "abcd"
True
>>> "abcd" < "abce"
True
>>> "A" < "a"
True
>>> ord("A")
65
>>> ord("a")
97
于 2012-11-15T15:00:49.783 に答える
2

ASCII テーブルでは inAが前に来るので、 inは in よりも小さいと見なされます。aSSpameeggs

>>> "A" < "a"
True
>>> "S" < "e"
True
>>> "S" < "eggs"
True

比較では文字列の長さは考慮されないことに注意してください。以下のコメントで @MikeGraham が正しく指摘しているように、各バイトの順序値は最初のバイトから比較されます。そして、最後の例のように、不一致が見つかるとすぐに比較が停止し、比較値が返されます。

ドキュメントから- シーケンスとその他のタイプの比較: -

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

また、同じ段落でさらに: -

文字列の辞書式順序付けでは、個々の文字に ASCII 順序付けを使用します

于 2012-11-15T14:59:46.307 に答える
2

Python の文字列は、論理的にソートできるように辞書順に並べられています。

>>> print sorted(['spam','bacon','SPAM','spamalot','Spam','eggs'])
['SPAM', 'Spam', 'bacon', 'eggs', 'spam', 'spamalot']

これには妥協点があり、主に Unicode を使用しています。文字éは、文字の後に並べ替えられます。z たとえば、次のようになります。

>>> 'e' < 'z'
True
>>> 'é' < 'z'
False

幸いなことに、ソート関数を使用しlocaleたり、string のサブクラスを使用したりして、任意の方法で文字列をソートすることができます。

于 2012-11-15T15:39:57.490 に答える
1

辞書的比較です。

于 2012-11-15T14:58:29.740 に答える