oeasy Python 113 内置函数sorted中使用 reverse和key

5 阅读6分钟

oeasy Python 113 内置函数sorted中使用 reverse和key

回忆

  • list类 有专门的

    • 反转方法
    • reverse
  • list中的 sort方法

    • 也有 reverse 参数
  • list类的sort方法

    • 总共3个参数
      1. self 是自己
      2. key
      3. reverse
  • 后两个参数 哪个放前面都行吗?

回忆

cl = list("oeasy")
cl.sort(key=ord, reverse=True)
cl.sort(reverse=True, key=ord)
  • 谁在前面都可以

图片描述转存失败,建议直接上传图片文件

  • 这次在等号两边 没有空格
    • 这符合pep-8的规范吗?

pep8

图片描述转存失败,建议直接上传图片文件

  • 函数多个参数传递的时候
    • 等号两边 不要空格
for num in range(128):
    print(num, chr(num), sep=":")
  • 再查看帮助

帮助文件

help(list.sort)
  • 这个sort函数的帮助手册里
    • 等号两边 也没有空格

图片描述转存失败,建议直接上传图片文件

  • 都是等号 为啥规则不一样呢?

提问ai

图片描述转存失败,建议直接上传图片文件

  • 为啥 帮助手册里面
    • key 排前面?🤔

图片描述转存失败,建议直接上传图片文件

重要性

  • First things first
    1. key 是 比较的核心
      • 更重要
    2. reverse 是 次序
      • 没那么重要

图片描述转存失败,建议直接上传图片文件

  • 使用不同的排序方式 (key)

    • 列表 会有不同的结果
    • 每次都在原位上修改
    • in-place
  • 能否 不在原位上 排序?🤔

询问

图片描述转存失败,建议直接上传图片文件

  • 推荐使用sorted函数

类型

help(__builtins__)
  • builtins 中有 一些函数
    • print
    • ord
    • chr
    • sorted

图片描述转存失败,建议直接上传图片文件

  • sorted 是
    • 内建函数

求助

  • 喊救命
help(sorted)
  • 函数 返回 新列表
    • 原列表 不变

图片描述转存失败,建议直接上传图片文件

  • 三个参数
    • 按重要性排序
参数/概念说明
iterable可迭代对象
key排序方法
reversed是否反转
  • 为啥这个次序?

First things first

  1. iterable 是 排序的目标
    • 给谁排序啊
    • 对应 list.sort里面的 self
  2. key 是 比较的算法
    • 用啥比较
  3. reverse 是 次序
    • 结果队列是否 反转

图片描述转存失败,建议直接上传图片文件

  • sorted函数 的 参数列表
    • 和 list.sort 基本一样
  • list类的sort方法如何理解?

类和对象

  • 类 class
    • 是 抽象的 数据类型
    • list 就是 列表类
  • 列表类 这些 方法

图片描述转存失败,建议直接上传图片文件

  • 对象 object
    • 是 类的 实例对象
    • instance object
help(list.sort)
  • 所以 list.sort 中的 self
    • 就是对象自己
    • 他知道 给谁排序
  • 刚才的sorted函数
    • 他不知道 给谁排序
    • 需要传个 可遍历的对象进去

图片描述转存失败,建议直接上传图片文件

  • sorted 和 list.sort
    • 参数一致
    • 次序也一致
    • 重要的放前面

实验

  • 使用len进行排序
    • 返回 新结果 列表new
sl = ["12", "3"]
new = sorted(sl, key=len)
print(sl)
print(new)
  • sorted方法
    • 不会影响sl

图片描述转存失败,建议直接上传图片文件

  • sorted函数可以使用reverse吗?

reversed

sl = ["12", "3"]
new = sorted(sl, key=len, reverse=True)
print(sl)
print(new)
  • 可以使用reverse参数

图片描述转存失败,建议直接上传图片文件

  • sorted 函数
    • 时间复杂度是多少?

再问

  • sort时间复杂度
    • 和 list.sort 一样
    • 是 n*log(n)

图片描述转存失败,建议直接上传图片文件

  • 怎么理解?

提问

图片描述转存失败,建议直接上传图片文件

  • timsort是什么呢?

timsort

图片描述转存失败,建议直接上传图片文件

  • 一种排序算法
    • Tim Peters发明的

回忆

  • 写 python之禅 的 Tim

图片描述转存失败,建议直接上传图片文件

  • Tim Peters

图片描述转存失败,建议直接上传图片文件

  • zen of python 作者

python之禅

图片描述转存失败,建议直接上传图片文件

import this
  • 禅宗
    • 通过直觉、冥想
    • 达到 顿悟
      • 以心传心
      • 不设文字
      • 直指人心

禅意

  • 追求超越语言概念的真理

图片描述转存失败,建议直接上传图片文件

  • 对生命本质的体悟

zen

图片描述转存失败,建议直接上传图片文件

排序总结

  • 2 sort
对比维度list.sortsorted
返回值None新列表
对原列表原地修改不改变原始对象
核心特点节省内存保留原数据
  • 2 参数
参数名类型默认值作用说明
key函数None排序依据的函数
reverse布尔值False控制方向
  • 函数、方法、参数
    • 有啥区别?

总结

类别核心定义关键特征简单示例
方法依附于类/对象谁调用就改谁sl.reverse()
sl.sort()
函数实现特定功能调用时
把列表当参数传进去
sorted(sl)
参数函数/方法
输入变量
根据参数
实现功能
sorted(reverse = True)
sl.sort(revserse = True)
  • 排好序的列表
    • 就是 有序列表
  • 再向 有序列表 新插 列表项
    • 就得 讲究 位置

图片描述转存失败,建议直接上传图片文件

  • 插入后
    • 有序列表
    • 还得 依然有序
  • 插入 呢?🤔
  • 下次再说 👋