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

MBa*_*jee 4 python

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

>>> 'apple' > 'T'
True
>>> 'apple' > 't'
False
Run Code Online (Sandbox Code Playgroud)

对于这两种情况都应该是正确的.

编辑:

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

那么这个怎么样.11.1被视为'11 .1'?

>>> 'apple' > 11.1
True
Run Code Online (Sandbox Code Playgroud)

cdh*_*wie 8

由于a后自带T的ASCII字符集,但在此之前t.

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

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


Wil*_*uck 6

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

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

正如cdhowie所指出的,在十进制ASCII编码中T是84,a是97,并且t是116.因此:

>>> 'T' < 'a' < 't'
True
Run Code Online (Sandbox Code Playgroud)

为了表明我们的第二点:

>>> "apple" > "a"
True
Run Code Online (Sandbox Code Playgroud)

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

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

简单的答案是"是".的A转换11.1'11.1'正在执行.

更复杂的答案涉及如何在python中实现比较.如果Python对象实现了比较魔术方法,则可以对它们进行比较.你可以在该链接中对python内部进行相当多的阅读.

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

  • 很公平.对于大多数情况,`my_list.sort(key = str.upper)`可能足以满足期望. (2认同)