【问题标题】:python compare operator in string [duplicate]字符串中的python比较运算符[重复]
【发布时间】:2017-11-03 02:30:15
【问题描述】:

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

“1.0.3”>“1.0.0” 返回真

“1.0.3”>“1.0.6” 返回错误

听说是用ASCII码。

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

谢谢你。

【问题讨论】:

    标签: python compare operators version


    【解决方案1】:

    Python 使用字典顺序,这意味着比较每个字符串的第一个字符,如果它们不同,则得出结果。如果它们是相同的值,那么它将比较第二个字符,依此类推,直到字符串的末尾。

    在 Python 3 中,Unicode 代码点编号用于比较字符。在 Python2 中它使用字符的 ASCII 值。

    您可以通过使用ord 和chr 方法将整数转换为字符(反之亦然)的示例来了解其工作原理。

    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] 等于 b[0]
    a[1] == "." == 46
    b[1] == "." == 46
    a[1] 等于 b[1]
    a[2] == "0" == 48
    b[2] == "0" == 48
    a[2] 等于 b[2]
    a[3] == "." == 46
    b[3] == "." == 46
    a[3] 等于 b[3]
    a[4] == "3" == 51
    b[4]​​ == "6" == 54
    a[4] 小于 b[4]

    因此a &lt; b == True

    【讨论】:

    • 感谢 ARJMP!我明白你说的。
    【解决方案2】:

    以这种方式比较字符串时,您是在比较一个字符串是否在另一个字符串之前或之后(如果它们按字母顺序排序)。

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

    同样的事情也发生在你的小数上 - 但它可能会导致不良结果;

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

    这是因为“单词”的第一个“字母”是1 - 低于另一个“单词”的第一个“字母” - 2。

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

    【讨论】:

    • 谢谢影子,我会推荐你​​的。
    猜你喜欢
    • 1970-01-01
    • 2015-07-25
    • 2016-11-12
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 2019-07-25
    相关资源
    最近更新 更多