重複の可能性:
Python で使用される文字列比較手法
>>> "spam" < "bacon"
False
>>> "spam" < "SPAM"
False
>>> "spam" < "spamalot"
True
>>> "Spam" < "eggs"
True
質問:等しい長さの文字列を比較する方法。文字列が同じ長さでない場合はどうなりますか? また、"Spam" が "eggs" よりも短いのはなぜですか?
重複の可能性:
Python で使用される文字列比較手法
>>> "spam" < "bacon"
False
>>> "spam" < "SPAM"
False
>>> "spam" < "spamalot"
True
>>> "Spam" < "eggs"
True
質問:等しい長さの文字列を比較する方法。文字列が同じ長さでない場合はどうなりますか? また、"Spam" が "eggs" よりも短いのはなぜですか?
辞書的に。
最初のバイトが比較され、最初のバイトの序数値が 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
ASCII テーブルでは inA
が前に来るので、 inは in よりも小さいと見なされます。a
S
Spam
e
eggs
>>> "A" < "a"
True
>>> "S" < "e"
True
>>> "S" < "eggs"
True
比較では文字列の長さは考慮されないことに注意してください。以下のコメントで @MikeGraham が正しく指摘しているように、各バイトの順序値は最初のバイトから比較されます。そして、最後の例のように、不一致が見つかるとすぐに比較が停止し、比較値が返されます。
ドキュメントから- シーケンスとその他のタイプの比較: -
比較には辞書式順序が使用されます。最初に最初の 2 つの項目が比較され、それらが異なる場合は比較の結果が決まります。等しい場合は、次の 2 つの項目が比較され、いずれかのシーケンスが使い果たされるまで続きます。
また、同じ段落でさらに: -
文字列の辞書式順序付けでは、個々の文字に ASCII 順序付けを使用します
Python の文字列は、論理的にソートできるように辞書順に並べられています。
>>> print sorted(['spam','bacon','SPAM','spamalot','Spam','eggs'])
['SPAM', 'Spam', 'bacon', 'eggs', 'spam', 'spamalot']
これには妥協点があり、主に Unicode を使用しています。文字é
は、文字の後に並べ替えられます。z
たとえば、次のようになります。
>>> 'e' < 'z'
True
>>> 'é' < 'z'
False
幸いなことに、ソート関数を使用しlocale
たり、string のサブクラスを使用したりして、任意の方法で文字列をソートすることができます。
辞書的比較です。