-4
>>> "Monty" < "Python" 
True 
>>> "Z" < "a" 
True 
>>> "Monty" < "Montague" 
False 

それについてのルールは何ですか?文字数ですか、それとも何ですか?ありがとう

4

4 に答える 4

5

辞書順ソートです。したがって、「a」<「b」です。

関数を使用すると、ord()「Z」が「a」よりも低い値を持っていることがわかります

>>> ord('Z')
90
>>> ord('a')
97
于 2013-03-20T13:37:45.610 に答える
1

Python の文字列、タプル、およびリストは、辞書式順序を使用して比較されます。

タプルの例:

>>> (1,2) < (2,1)
True
>>> (1,2) < (1,2,-5)
True

アイデアは単純です。違いが生じるか、どちらかが短くなるまで、要素ごとに (文字列の場合は文字ごとに) 比較します。

于 2013-03-20T13:41:02.327 に答える
0

この順序をロケール依存の照合順序と混同しないように注意してください。例えば:

>>> 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
于 2013-03-20T14:12:54.203 に答える
0

文字が ASCII 範囲で定義されている順序で字句ソートすると、次のようになります。

A ... Za ... z

それ'Z' < 'a'が本当です。

2 つの文字列を比較する場合、各文字を比較し、一方が他方より大きい場合は文字列の方が大きく、等しい場合は次の文字に移動します。1 つの文字列の末尾に到達し、もう 1 つの文字列がまだ残っている場合は、最長の文字列が大きくなり、それ以外の場合は等しくなります。

于 2013-03-20T13:39:24.757 に答える