oeasy玩py111列表排序-sort比大小
列表 - 排序 - order
回忆
- 上次我们了解
- 最大值/最小值 函数
- max/min

- 可以直接给列表 排序 吗?
帮助

- 好像还真有
help(list.sort)
- 动手试试
排序
nl = [0, 3, 2, 1, 4]
nl.sort()
print(nl)
- 列表对象 调用 sort方法
- 列表项 从此 按升序排列

- 如果 想
降序呢?
翻转
- 寻找方法
list.
- list类 有个 reverse方法

- 啥意思?
词源
- reverse 来自于 vert

- turn 和 vert 是同源的

寻求帮助
help(list.reverse)
- 参数列表
- 第一个 是 self
- 默认的

原地把列表反转
效果
nl
nl.reverse()
nl
- reverse方法 让 列表
- 首尾翻转

- reverse方法
- 对字符列表用吗?
字符列表
cl = list("oeasy")
print(cl)
cl.sort()
print(cl)
cl.reverse()
print(cl)
- 字符列表可以反转
- 此时的列表项 是 字符

- 如果 列表项 是 字符串呢?
- 还能
排序么?
- 还能
字符串
sl = ["oeasy", "o2zz", "o3z"]
print(sl)
sl.sort()
print(sl)
- 可以排序

- 字符串咋排序呢?
字符串比较
- 排序的前提是 能够比大小
"o2zz" < "o3z"
"o3z" < "oeasy"
- 字符串可以比大小

- 具体怎么比的呢?
挨个比较
- 先看第一个
- 都是'o'
- 继续

- 再看第二个
- 比较 ascii 的值
- '2' < '3' < 'e'
- 不用再往后看了

- sort方法 效率咋样?
时间复杂度
- 算法效率
- 用 时间复杂度 描述
- O(nlogn)

- 这怎么理解?
Big O Notation
- 排序时间 和 列表长度 相关

- 对于 n维列表中 每一个位置
- 都得从 n个列表项中 挑一个出来
- 复杂度 是 O(n*n)
- O(n2)
- 可以优化吗?
优化
-
经过优化之后
- 成为O(n*logn)
- log(n) 是 以二为底的对数
- 成为O(n*logn)
-
对于 同样长度的 列表
- cpu需要干的活 少了
- 完成时间 短了
- 电就 省下来了

- O(n)
- Big O Notation
- 大O表示法
- 时间复杂度表示方法
- 横轴 空间
- 纵轴 是 时间
参数细节
help(list.sort)
- list.sort 共3个参数
- self
- key
- reverse
- self是自己

- 谁自己?
self
- 哪个 列表对象 调用方法
- 就是 哪个对象 自己

-
类 class
- 是 抽象的 数据类型
- list 就是 列表类
- 列表类 有一些 方法
-
对象 object
- 是 某个类的 实例对象
- instance object
nl.sort()
cl.sort()
-
各调各的
-
列表中 列表项的类型
- 可以
不同吗?
- 可以
来试试
- 两个列表项
- 字符串
- 整形
lst = ["oeasy",123]
lst[0]
lst[1]
type(lst[0])
type(lst[1])
- 类型 还是列表

- 列表项 是 不同类型的话
- 还能 排序 吗??
排序(sort)
lst = ["oeasy", 123]
lst.sort()
- TypeError
- int 和 str
- 比不了大小

- 咋理解?
简化
- 简化之后
"oeasy" < 123
- 整型变量 和 字符串变量
- 一个 是 名字
- 另一个 是 体重
- 驴唇不对马嘴

- 比不了 大小
- 也就 排不了序
总结
- 这次我们了解
列表排序- 原地 完成
- in-place

- 排序规则 依赖于 列表项类型
| 数据类型 | 比较规则 |
|---|---|
| 数字型 | 基于数字直接比 |
| 字符串 | 转化为ASCII码 |
- 我就想让 字符串 和 数值 一起排序
- 有可能吗?
- 下次再说 👋 s
904

被折叠的 条评论
为什么被折叠?



