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

  • 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。

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 是 比较的核心
  • 更重要
  1. 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
  1. key 是 比较的算法
  • 用啥比较
  1. 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.sort | sorted |
| 返回值 | None | 新列表 |
| 对原列表 | 原地修改 | 不改变原始对象 |
| 核心特点 | 节省内存 | 保留原数据 |

  • 2 参数

|---------|-----|-------|---------|
| 参数名 | 类型 | 默认值 | 作用说明 |
| key | 函数 | None | 排序依据的函数 |
| reverse | 布尔值 | False | 控制方向 |

  • 函数、方法、参数
  • 有啥区别?
总结

|--------|------------|---------------|-------------------------------------------------|
| 类别 | 核心定义 | 关键特征 | 简单示例 |
| 方法 | 依附于类/对象 | 谁调用就改谁 | sl.reverse() sl.sort() |
| 函数 | 实现特定功能 | 调用时 把列表当参数传进去 | sorted(sl) |
| 参数 | 函数/方法 输入变量 | 根据参数 实现功能 | sorted(reverse = True) sl.sort(revserse = True) |

  • 排好序的列表
  • 就是 ​有序列表​
  • 再向 ​有序列表​ 新插 列表项
  • 就得 讲究 位置
  • 插入后
  • 有序列表
  • 还得 ​依然​有序
  • ​咋​插入 呢?🤔
  • 下次再说 👋
  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。
相关推荐
yejqvow1216 小时前
Pandas 高效实现组内跨行时间戳匹配与布尔标记
jvm·数据库·python
喜欢吃鱿鱼16 小时前
DES加解密(附带解决转义问题)-VUE
开发语言·前端·javascript
愚者游世16 小时前
variadic templates(可变参数模板)各版本异同
开发语言·c++·程序人生·面试
2501_9219608516 小时前
协同本体论:元公理体系、普适演化律则与工程范式统一构建
python·重构·numpy·pandas·scipy
小锋java123417 小时前
【技术专题】Matplotlib3 Python 数据可视化 - Matplotlib3 绘制热力图(Heatmap)
python
书到用时方恨少!17 小时前
Python 面向对象进阶:多态——同一个接口,千种面孔
开发语言·python·多态·面向对象
AC赳赳老秦17 小时前
OpenClaw实战案例:用Agent实现每日工作日报自动生成+发送
人工智能·python·职场和发展·eclipse·github·deepseek·openclaw
qq_1898070317 小时前
html标签如何提升可访问性_aria-label与title区别【指南】
jvm·数据库·python
无忧.芙桃17 小时前
现代C++精讲之处理类型
开发语言·c++
黎梨梨梨_17 小时前
C++入门基础(下)(重载,引用,inline,nullptr)
开发语言·c++·算法