4

为什么python给出这样的输出:

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

这两种情况都应该是真的。对吧?

编辑:

我得到了 ASCII 表的想法。谢谢!

现在怎么样。11.1 是否被视为“11.1”?

>>> 'apple' > 11.1
True
4

2 回答 2

8

因为aTASCII 字符集中之后,但在t.

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

  • T是84。
  • a是 97。
  • t是 116。
于 2012-10-17T20:19:39.347 回答
6

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

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

正如 cdhowie 所指出的,十进制 ASCII 编码T是84、97at116。因此:

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

展示我们的第二点:

>>> "apple" > "a"
True

要获得更自然的比较,请参阅:Python 是否具有用于字符串自然排序的内置函数?

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

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

更复杂的答案涉及如何在 python 中实现精确比较。如果 Python 对象实现了比较魔术方法,则可以比较它们。在该链接中,您可以阅读大量关于 python 内部的内容。

正如@glibdup 指出的那样,上述内容不正确。在 python 中,不同的类型是根据它们的类型名称进行比较的。所以,因为'str' > 'float'任何字符串都将大于任何浮点数。或者,任何元组都将大于任何字符串。

于 2012-10-17T20:26:15.000 回答