在Python里面字符串比较大小

本质就是 ASCII码 的大小比较

Posted by 叉叉敌 on August 25, 2021

好久没有开始写过技术文章了。

主要是拖延病犯了,始终不愿意抬手去敲键盘。有一个好的主题,自己老毛病又来了,觉得这个主题太简单。技术人始终就是太偏执,认为一定是要高级、复杂的东西才需要分享。

比如需要一个高级的算法、复杂的架构才需要分享给其他人,其实不然。

分享的东西一定要有意义,不要造垃圾知识。之前看到一篇报道,说一个美国一个小伙用机器翻译成苏格兰的维基百科,导致读起来非常的费力,这个就是典型的从事知识破坏活动。

截图

https://redd.it/ig9jia

开头说了这么多,就开始今天的小分享。


问题

问题就是:"9" >= "15" 实际返回的是什么?本质比较的又是什么?

在 python 里面其实返回的是 True


原理

在 python 文档里面(如下),关于字符串的比较其实就是首先从第一个开始,转化成对应的ASCII码后进行比较大小, 如果它们相等,则比较后一个,依此类推,直到两个字符串都用完为止。

https://docs.python.org/3/tutorial/datastructures.html#comparing-sequences-and-other-types

既然是ASCII码的比较,那么可以来实战一下,加深记忆。


举例

先来第一个:

  • ‘6’>‘47’ True

下面从第一位就可以比较出结果了。ord(6)=54, 而ord(4)=52,显而易见,54>52,所以结果是 True。

举一反三:

  • ‘1234’ > ‘1233’ 结果是 True

从第1到第3都是一样的,因此到第4的时候才发现是不同。根据ASCII码返回结果。

  • ‘1234’ > ‘123333333’ 结果也是 True

第4位的已经出结果了,不管后面有多少个3或者其他,结果一样。

比较其他

除了单个纯数字、字符串可以比较,还有数组、元组都都可以比较。比较方式和字符串类似。

直接引用官方的例子:

(1, 2, 3)              < (1, 2, 4)
[1, 2, 3]              < [1, 2, 4]
'ABC' < 'C' < 'Pascal' < 'Python'
(1, 2, 3, 4)           < (1, 2, 4)
(1, 2)                 < (1, 2, -1)
(1, 2, 3)             == (1.0, 2.0, 3.0)
(1, 2, ('aa', 'ab'))   < (1, 2, ('abc', 'a'), 4)

但是要注意在 python 里面是同等类型的比较,不同类型比较是会报TypeError错。比如 “1” > 1,会提示:TypeError: '>' not supported between instances of 'str' and 'int'