Skip to content

Latest commit

 

History

History
224 lines (162 loc) · 5.55 KB

127-203062-序列类容器的比较运算.sy.md

File metadata and controls

224 lines (162 loc) · 5.55 KB
show version enable_checker
step
1.0
true

比较运算符

回忆

  • 上次研究了
    • 大于
    • 小于
    • 等于
    • 不等于
  • 数字各个类型之间可以比较
  • 但是要注意有的是 decimal 和 float 之间有的精确度的差别
  • nan 一切比较结果都为 False
  • inf 可以参与比较
  • 数字和字符串之间不能比较
  • 字符串之间可以比较么?🤔

字符串比较

图片描述

  • 字符串 str 按照对应字符的 unicode 编码的序号来进行比较

图片描述

  • 如果有中文,还满足么?

中文

图片描述

  • 中文也是先转化为序号然后比较
  • 多个字符呢?

比较

图片描述

  • 第一个字符相等看第二个
  • 第二个谁大就是整体大
  • 如果第二个也相等呢?

第三个

图片描述

  • 依次对应位置比较下去
  • 从前往后挨个比较
  • 只要不是平局就是最终结果
  • 字符串属于字符的序列
  • 但是如果前三个都相等,但是
    • 一个后面有字符
    • 另一个没有呢?

没有对应

  • 如果没有对应了
  • 任何字符都比空串要大
  • 有大于无

图片描述

  • 整体的口诀是
    • 从前往后,有大于无
    • 可是比较字符串的大小有什么意义呢?

比较的意义

  • 如果我们需要对人名册按照姓名排序
    • 那么就一定要有姓名的排序方法
    • 这种排序方法是基于字符串的
  • 字符串可以说是最基本的类型
  • 有些时候直接就拿字符串进行比较就好
  • 比如比较1980-10-04和2022-01-22这两个日期
    • 如果把他做年月日的截取
    • 再转化为datetime类型
    • 然后再比较
    • 貌似逻辑上很清晰
    • 但是没有必要

图片描述

  • 直接拿字符串比较就行了
  • 开发效率和运行效率都很高
  • 那么除了字符串序列之外
  • 字节序列是否可以比较呢?

字节序列

图片描述

  • 序列类的好像都差不多啊
  • 从前往后一个个地比较
  • 分出了胜负就是最终胜负
  • 整体的口诀还是
    • 从前往后,有大于无

图片描述

试试

图片描述

  • 字节序列是由字节组成的
  • 那就要一个个字节地单挑
  • 直到决出胜负
  • 如果长度字符数量对不上呢?

长度

  • 从前向后
    • 逐个字节 比较
    • 先比能配对 比较的

图片描述

  • 最后
    • 一方 所有的字节 都比较过了
    • 另一方 还有字节 没有比较
    • 任何字节 都比 没有字节 要大
  • 这和字符串 一个规律
  • 还有 什么序列类 元素 来着?

列表

  • 一样的
    • 从前向后 捉对厮杀
    • 分出胜负 就是 最终胜负
  • 整体的口诀 还是
    • 从前往后
    • 有大于无

图片描述

  • 最后这个怎么理解
  • 查看帮助手册

帮助手册

图片描述

帮助

  • 前两轮

    • 不分胜负
  • 最后一轮

    • 比较的是 列表和整型
      • 相当于比较 [3] > 0
  • 系统不支持相应的比较

图片描述

  • 但如果比较 fraction 和 decimal 呢?

比较

图片描述

  • 列表相等是因为三个元素都相等
  • 如果精度有问题
  • 还是不等的
  • 数量不等呢?

原理

图片描述

  • 前面不分胜负
  • 有后续的会胜出

图片描述

  • 第一轮不分胜负
  • 第二轮列表比较
    • 比较中
    • 第一轮不分胜负
    • 第二轮有后续的胜出

手册

图片描述

  • 至此,可以推断序列类的比较运算规则基本一致
  • 我们比较了
    • 字符串 str 也就是字符序列
    • 字节序列
    • 列表
    • 元组
  • 列表和元组之间可以比较吗?

列表和元组

图片描述

  • 可以判断是否相等或不等
  • 但是不能判断大于小于

总结

  • 这次研究下面这些类的比较运算符
    • 字符串 str
    • 字节序列 bytes
    • 列表 list
    • 元组 tuple
  • 从头到尾按顺序比较序列中的每个元素
    • 如果有分出大小
      • 就是最终的大小
    • 如果有一方没有了元素了
      • 另一方就大
    • 如果没有分出大小就继续向后
  • 整体的口诀还是
    • 从前往后,有大于无
  • 如果有嵌套的列表之类的东西
    • 就比较这两个列表
    • 如果此子列表中还有列表
    • 就继续比较下去
    • 直到分出胜负
  • 除了列表之外还有什么容器呢?🤔
  • 下次再说 👋