可能重複:
String Comparison Technique Used by Python字符串比較如何在python上工作?
>>> "spam" < "bacon"
False
>>> "spam" < "SPAM"
False
>>> "spam" < "spamalot"
True
>>> "Spam" < "eggs"
True
qeustion:長度字符串如何相等比較。如果字符串長度不一樣,爲什麼「垃圾郵件」少於「雞蛋」?
可能重複:
String Comparison Technique Used by Python字符串比較如何在python上工作?
>>> "spam" < "bacon"
False
>>> "spam" < "SPAM"
False
>>> "spam" < "spamalot"
True
>>> "Spam" < "eggs"
True
qeustion:長度字符串如何相等比較。如果字符串長度不一樣,爲什麼「垃圾郵件」少於「雞蛋」?
這是一個詞典對比。
由於A
進來ASCII表a
之前,所以S
在Spam
被認爲是小於e
在eggs
。
>>> "A" < "a"
True
>>> "S" < "e"
True
>>> "S" < "eggs"
True
請注意,字符串長度在沒有考慮到比較。每個字節的序數值從第一個字節開始進行比較,正如@MikeGraham在下面的註釋中正確指出的那樣。 只要發現不匹配,就停止比較,並返回比較值,如上例所示。
從docs - Comparing Sequences and Other Types: -
比較操作按字典順序:首先將前兩個 項進行比較,並且如果不同,就決定的 比較結果;如果它們相等,則比較接下來的兩個項目, 等等,直到任一序列被耗盡。
在同一段還更進一步: -
字典序的字符串用來 單個字符
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
字符串在Python是lexicographically ordered,使他們能夠在邏輯上分類:
>>> print sorted(['spam','bacon','SPAM','spamalot','Spam','eggs'])
['SPAM', 'Spam', 'bacon', 'eggs', 'spam', 'spamalot']
沒有與此妥協,主要是使用Unicode。信é
將信z
for example後進行排序:
>>> 'e' < 'z'
True
>>> 'é' < 'z'
False
幸運的是,你可以使用排序功能,使用locale
或字符串的一個子類有反正整理你希望字符串。
好點,但大概不限於ASCII編碼。 –
它完全依賴於str對象中的字節值(它本質上不是文本的 - 它只是字節)。儘管你可能使用了一些編碼來創建和/或你的str對象,但是Python並不依賴於任何'''操作的編碼。 –
@MikeGraham ..你說得對。之前沒有進入精確度。現在更新答案。謝謝 :) –