字符串中的python比较运算符

python compare operator in string

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

当python比较字符串中的运算符时。它是如何工作的?

"1.0.3">"1.0.0"返回true

"1.0.3">"1.0.6"返回false

我听说它使用的是ASCII码。

任何人请详细解释这个问题。

谢谢你。


python使用字典排序,这意味着对每个字符串的第一个字符进行比较,如果它们不同,则得出一个结果。如果它们是相同的值,那么它将比较第二个字符,以此类推,直到字符串结束。

在python 3中,unicode码位号用于比较字符。在python2中,它使用字符的ASCII值。

您可以看到使用ordchr方法的示例如何工作,这些方法将整数转换为字符,反之亦然。

1
2
3
4
5
6
7
8
9
10
11
12
a ="1.0.3"
b ="1.0.6"

for i, v in enumerate(a):
    print('a[{}] =="{}" == {}'.format(i, v, ord(v)))
    print('b[{}] =="{}" == {}'.format(i, b[i], ord(b[i])))
    if v == b[i]:
        print('a[{}] is equal to b[{}]'.format(i, i))
    if v > b[i]:
        print('a[{}] is greater than b[{}]'.format(i, i))
    if v < b[i]:
        print('a[{}] is less than b[{}]'.format(i, i))

a[0] =="1" == 49
b[0] =="1" == 49
a[0] is equal to b[0]
a[1] =="." == 46
b[1] =="." == 46
a[1] is equal to b[1]
a[2] =="0" == 48
b[2] =="0" == 48
a[2] is equal to b[2]
a[3] =="." == 46
b[3] =="." == 46
a[3] is equal to b[3]
a[4] =="3" == 51
b[4] =="6" == 54
a[4] is less than b[4]

因此,a < b == True


以这种方式比较字符串时,如果按字母顺序排序,则比较一个字符串是在另一个字符串之前还是之后。

1
2
"a" <"b"  # True - a is earlier in the alphabet than b
"b" <"a"  # False

同样的事情也发生在你的小数上——但是它会导致不希望的结果;

1
2
11 < 2  # True - 11 is larger than 2.
"11" <"2"  # False

这是因为"单词"的第一个"字母"是1,比另一个"单词"的第一个"字母"要低。

有一些库,例如natsort,试图解决这个问题,所以当使用上面的多点数字(使它们成为无效的十进制数字)时,您可能需要研究这个问题。