2012-11-15 45 views

回答

2

由於A進來ASCII表a之前,所以SSpam被認爲是小於eeggs

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

請注意,字符串長度在沒有考慮到比較。每個字節的序數值從第一個字節開始進行比較,正如@MikeGraham在下面的註釋中正確指出的那樣。 只要發現不匹配,就停止比較,並返回比較值,如上例所示。

docs - Comparing Sequences and Other Types: -

比較操作按字典順序:首先將前兩個 項進行比較,並且如果不同,就決定的 比較結果;如果它們相等,則比較接下來的兩個項目, 等等,直到任一序列被耗盡。

在同一段還更進一步: -

字典序的字符串用來 單個字符

+1

好點,但大概不限於ASCII編碼。 –

+0

它完全依賴於str對象中的字節值(它本質上不是文本的 - 它只是字節)。儘管你可能使用了一些編碼來創建和/或你的str對象,但是Python並不依賴於任何'''操作的編碼。 –

+0

@MikeGraham ..你說得對。之前沒有進入精確度。現在更新答案。謝謝 :) –

3

Lexigraphically的ASCII順序。

比較第一個字節,如果第一個字節的序數值小於第二個字節,則它是較小的。如果更多,則更大。如果它們相同,則嘗試下一個字節。如果它是所有關係,一個更長,則較短的一個較小。

>>> "a" < "zzz" 
True 
>>> "aaa" < "z" 
True 
>>> "b" < "a" 
False 
>>> "abc" < "abcd" 
True 
>>> "abcd" < "abce" 
True 
>>> "A" < "a" 
True 
>>> ord("A") 
65 
>>> ord("a") 
97 
2

字符串在Python是lexicographically ordered,使他們能夠在邏輯上分類:

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

沒有與此妥協,主要是使用Unicode。信é將信zfor example後進行排序:

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

幸運的是,你可以使用排序功能,使用locale或字符串的一個子類有反正整理你希望字符串。