Python字符串与不同case和float的比较

时间:2012-10-17 20:18:39

标签: python

为什么python会提供这样的输出:

>>> 'apple' > 'T'
True
>>> 'apple' > 't'
False

两种情况都应该是正确的。直接?

编辑:

我有ASCII表的想法。谢谢!!

现在怎么样。11.1被视为'11 .1'?

>>> 'apple' > 11.1
True

2 个答案:

答案 0 :(得分:8)

因为a位于ASCII字符集中的T之后,而是位于t之前。

这些字母的十进制ASCII编码:

  • T是84。
  • a是97。
  • t是116。

答案 1 :(得分:6)

这里的关键见解是字符串比较不是基于字母顺序或任何自然顺序进行比较,而是根据ASCII中字符的顺序进行比较。您可以在ASCII table

中查看此订单

Python将比较每个字符串中的第一个字符,如果相同则将继续下一个字符串。它将执行此操作,直到字符不同,或者一个字符串用完(在这种情况下,较长的字符串将被视为更大)。

正如cdhowie指出的那样,在十进制ASCII编码中,T为84,a为97,t为116.因此:

>>> 'T' < 'a' < 't'
True

显示我们的第二点:

>>> "apple" > "a"
True

要获得更自然的比较,请参阅:Does Python have a built in function for string natural sort?

要回答您在编辑中添加的问题:

简单的回答是“是”。正在执行11.1'11.1'的转换。

更复杂的答案是如何在python中实现比较。如果Python对象实现Comparison magic methods,则可以对它们进行比较。在该链接中,您可以对python内部进行相当多的阅读。

正如@glibdup指出的那样,上面的内容是不正确的。在python中,不同的类型是compared based on the name of their type。所以,因为'str' > 'float'任何字符串都将大于任何浮点数。或者,任何元组都将大于任何字符串。