字符串比较如何在python上运行?

how does string comparison work on python?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
String Comparison Technique Used by Python

1
2
3
4
5
6
7
8
>>>"spam" <"bacon"
False
>>>"spam" <"SPAM"
False
>>>"spam" <"spamalot"
True
>>>"Spam" <"eggs"
True

qeustion:如何比较等长字符串。如果字符串的长度不相同,为什么"垃圾邮件"小于"鸡蛋"?


词汇。

比较第一个字节,如果第一个字节的序数小于第二个字节的序数,则其值较小。如果更多,就更大。如果它们相同,则尝试下一个字节。如果所有的领带都是长的,那么越短的就越少。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>>"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中的字符串按字典顺序排列,以便在逻辑上进行排序:

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

这方面存在一些妥协,主要是Unicode。字母é将在字母z之后排序,例如:

1
2
3
4
>>> 'e' < 'z'
True
>>> 'é' < 'z'
False

幸运的是,您可以使用sort函数,使用locale或字符串的子类来按您的意愿对字符串进行排序。


由于A在ascii表中位于A之前,所以Spam中的S被认为比eggs中的e小。

1
2
3
4
5
6
>>>"A" <"a"
True
>>>"S" <"e"
True
>>>"S" <"eggs"
True

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

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

The comparison uses lexicographical ordering: first the first two
items are compared, and if they differ this determines the outcome of
the comparison; if they are equal, the next two items are compared,
and so on, until either sequence is exhausted.

同样,在同一段中:

Lexicographical ordering for strings uses the ASCII ordering for
individual characters


这是一个词典编纂的比较。