4

可能重复:
Python 使用的字符串比较技术

>>> "spam" < "bacon"
False
>>> "spam" < "SPAM"
False
>>> "spam" < "spamalot"
True
>>> "Spam" < "eggs"
True

问题:如何比较等长字符串。如果字符串长度不同怎么办,为什么“Spam”小于“eggs”?

4

4 回答 4

3

词法上。

比较第一个字节,如果第一个字节的序数值小于第二个字节,则它更小。如果更多,那就更大了。如果它们相同,则尝试下一个字节。如果是所有关系并且一个较长,则较短的一个较小。

>>> "a" < "zzz"
True
>>> "aaa" < "z"
True
>>> "b" < "a"
False
>>> "abc" < "abcd"
True
>>> "abcd" < "abce"
True
>>> "A" < "a"
True
>>> ord("A")
65
>>> ord("a")
97
于 2012-11-15T15:00:49.783 回答
2

由于在 ASCII 表中A出现在前面,因此in被认为比in小。aSSpameeggs

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

请注意,比较中不考虑字符串长度。正如@MikeGraham 在下面的评论中正确指出的那样,从第一个字节开始比较每个字节的序数值。一旦发现不匹配,比较就会停止,并返回比较值,如上一个示例所示。

来自文档 - 比较序列和其他类型: -

比较使用字典顺序:首先比较前两项,如果它们不同,则确定比较的结果;如果它们相等,则比较接下来的两项,依此类推,直到任一序列用完。

还在同一段中进一步: -

字符串的字典顺序使用单个字符的 ASCII 顺序

于 2012-11-15T14:59:46.307 回答
2

Python 中的字符串是按字典顺序排列的,因此它们可以进行逻辑排序:

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

对此有一些妥协,主要是使用 unicode。字母é将在字母之后排序z ,例如

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

幸运的是,您可以使用排序函数、使用locale字符串或字符串的子类来对字符串进行任何您希望的排序。

于 2012-11-15T15:39:57.490 回答
1

这是一个字典比较。

于 2012-11-15T14:58:29.740 回答