- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
oeasy Python 113 内置函数sorted中使用 reverse和key
回忆
- list类 有专门的
- 反转方法
- reverse
- list中的 sort方法
- 也有 reverse 参数
- list类的sort方法
- 总共3个参数
- self 是自己
- key
- 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
- key 是 比较的核心
- 更重要
- reverse 是 次序
- 没那么重要

- 使用不同的排序方式 (key)
- 列表 会有不同的结果
- 每次都在
原位上修改 - in-place
- 能否
不在原位上 排序?🤔
询问

- 推荐使用sorted函数
类型
help(__builtins__)
- builtins 中有 一些函数
- ord
- chr
- sorted

- sorted 是
- 内建函数
求助
-
喊救命
help(sorted)
-
函数 返回 新列表
- 原列表 不变

- 三个参数
- 按重要性排序
|----------|-------|
| 参数/概念 | 说明 |
| iterable | 可迭代对象 |
| key | 排序方法 |
| reversed | 是否反转 |
- 为啥这个次序?
First things first
- iterable 是 排序的目标
- 给谁排序啊
- 对应 list.sort里面的 self
- key 是 比较的算法
- 用啥比较
- 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 即可。