>>> "Monty" < "Python"
True
>>> "Z" < "a"
True
>>> "Monty" < "Montague"
False
それについてのルールは何ですか?文字数ですか、それとも何ですか?ありがとう
>>> "Monty" < "Python"
True
>>> "Z" < "a"
True
>>> "Monty" < "Montague"
False
それについてのルールは何ですか?文字数ですか、それとも何ですか?ありがとう
辞書順ソートです。したがって、「a」<「b」です。
関数を使用すると、ord()
「Z」が「a」よりも低い値を持っていることがわかります
>>> ord('Z')
90
>>> ord('a')
97
Python の文字列、タプル、およびリストは、辞書式順序を使用して比較されます。
タプルの例:
>>> (1,2) < (2,1)
True
>>> (1,2) < (1,2,-5)
True
アイデアは単純です。違いが生じるか、どちらかが短くなるまで、要素ごとに (文字列の場合は文字ごとに) 比較します。
この順序をロケール依存の照合順序と混同しないように注意してください。例えば:
>>> import locale
>>> locale.strcoll("Z","a")
-1
>>> "Z" < "a"
True
おそらくlocale.strcoll
、最初の文字列が 2 番目の文字列より小さい場合は -1 を返し、最初の文字列が 2 番目の文字列より大きい場合は +1 (等しい場合は 0) を返します。
しかし:
>>> locale.setlocale(locale.LC_ALL,"")
'English_United Kingdom.1252'
>>> locale.strcoll("Z","a")
1
>>> "Z" < "a"
True
ロケールは照合順序を変更できますが、(ここでは) 通常の比較では変更できません。英語の照合シーケンスは aAbBcC...xXyYzZ になります (他の「en」ロケールに適用されます)。例えば:
>>> ml=["a","b","c","A","B","C"]
>>> sorted(ml)
['A', 'B', 'C', 'a', 'b', 'c']
>>> sorted(ml,key=locale.strxfrm)
['a', 'A', 'b', 'B', 'c', 'C']
>>>
非 ASCII 文字の場合は、次の点を考慮してください。
>>> locale.strcoll("é","f")
-1
>>> "é" < "f"
False
文字が ASCII 範囲で定義されている順序で字句ソートすると、次のようになります。
A ... Za ... z
それ'Z' < 'a'
が本当です。
2 つの文字列を比較する場合、各文字を比較し、一方が他方より大きい場合は文字列の方が大きく、等しい場合は次の文字に移動します。1 つの文字列の末尾に到達し、もう 1 つの文字列がまだ残っている場合は、最長の文字列が大きくなり、それ以外の場合は等しくなります。