Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0146
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
本教程同步发布在:
个人网站: `https://oeasy.org`
蓝桥云课: `https://www.lanqiao.cn/courses/3584`
GitHub: `https://github.com/overmind1980/oeasy-python-tutorial`
Gitee: `https://gitee.com/overmind1980/oeasypython`
---- 上次研究了
- 大于
- 小于
- 等于
- 不等于
- 多个字符 的 字符串 如何比较 呢???🤔
"o1z" < "o2z"
"o" == "o"
"1" < "2"- 第一个字符 相等
- 看 第二个
- 第二个谁大 就是 整体大
- 如果第二个也相等呢?
"o1sy" < "o1z"
"o1" == "o1"
"s" < "z"- 依次对应位置 比下去
- 从前往后 挨个比
- 只要 不是 平局
- 就出结果
- 空串 怎么比呢?
"o2z" > "o2"
"z" > ""- 空串 最小
- 比任意字符 都小
- 从前往后 有大于无
- 这就是 帮助里说的
- 按照字典序比较
- lexicographically
- 比较字符串的大小 有什么用呢?
username = "admin"
if username == "admin":
print("管理员登录")
else:
print("普通用户")
- 如果是管理员 就有特殊效果
# 原始:完全乱序,年份月份颠倒,看不出先后
war_events = {
"2024/04/13": "伊朗大规模向以色列发射弹道导弹与自杀无人机,跨区域远程打击",
"2022/02/24": "俄乌全面冲突爆发,大规模地面攻防+远程导弹打击开启",
"2019/06/20": "伊朗防空部队击落美军全球鹰高空无人侦察机,美伊局势急剧升温",
"2023/05/16": "乌克兰使用美援爱国者防空系统,拦截俄军高超音速匕首导弹",
"2020/01/03": "美军无人机空袭斩首伊朗名将苏莱曼尼,中东战争风险爆发",
"2024/09/01": "红海空域美制F-35战机与伊朗防空力量近距离空战博弈",
"2022/03/05": "北约援助防空导弹,俄乌多地爆发近距离空战对抗"
}
# YYYY/MM/DD 字符串直接排序,不用转日期
sorted_dates = sorted(war_events.keys())
print("=== 排序后标准时间线 ===")
for d in sorted_dates:
print(f"{d} → {war_events[d]}")
- 对字典排序的时候
- 没有指定 lambda
- 用的是 字典的 key排序
- 比较 日期字符串 的大小
- 除了 字符串之外
- 还有 什么序列类 容器?
- 列表 就是序列类的容器
- 先喊 help()
- TRUTHVALUE 这个 topic
- 以下值 转化为 布尔类型 都为False
| 类别 | 具体内容 |
|---|---|
| 常量 | None、False |
| 数字 | 0、0.0、0j、Decimal(0) |
| 容器 | 空字符串 ''、空元组 ()、空列表 []、空字典 {}、空集合 set() |
- 从开关
- 到门电路
- 再到 逻辑真值
- 比较的结果 是 布尔类型的
[0, 1, 2] > [0, 1, 3]
[0, 1] == [0, 1]
2 > 3- 一样的
- 从前向后 捉对厮杀
- 分出胜负 就是 最终胜负
- 整体的口诀 还是
- 从前往后
- 有大于无
staffs = [
[1, 82, 26, "李四"],
[0, 99, 30, "张三"], # 哪怕满分,标记0直接出局
[1, 95, 28, "王五"],
[1, 82, 29, "赵六"],
[0, 98, 27, "钱七"] # 同样一票否决
]
res = sorted(staffs, reverse=True)
print("=== 排序后最终考核名单 ===")
for s in res:
print(s)
- 从高到低
[1, 2, [3]] > [1, 2, 0]- 这个TypeError怎么理解
- 前两轮
- 不分胜负
- 最后一轮
- 比较的是 列表和整型
[3] > 0
- 系统 不支持 相应的比较
- 如果就想要 列表里面 有列表
- 怎么办?
[1, 2, [3]] > [1, 2, [0]]- 前两轮相等
- 第三轮比较
- 回到了 列表比较
[3] > [0]- 直接 比较 第0项
3 > 0
[3] > [0]
[1, 2, [3]] > [1, 2, [0]]- 完成比较
- 帮助手册怎么说?
- /sequence
- lexicographically
- 字典序的
- 如果列表不一样长呢?
[1, 2, 0] > [1, 2]
- 前面不分胜负
- 有后续的 定胜负
[1, [2], 3] < [1, [2, 3]]- 第0项 不分胜负
- 第1项 比较中
- 第0项 不分胜负
- 第1轮 有后续的胜出
- 如果前面 定了胜负 还看后面吗?
[0, [5]] > [5, 0]
- 由于第0个元素 已经分出了胜负
- 后面 直接短路
- 比都不比
- 在第0个人比较中
- 吕布vs武松
- 第0项属性 不分胜负
- 第1个属性 分出了胜负
# 两队武将列表,元素是(武力,智力)纯数字元组
sg_team = [
(98, 85), # 吕布
(97, 70), # 张飞
(95, 92) # 关羽
]
sh_team = [
(98, 60), # 武松
(95, 88), # 林冲
(93, 55) # 李逵
]
# 直接整体对比列表
if sg_team > sh_team:
print("三国武将军团 综合实力胜出")
else:
print("水浒武将军团 综合实力胜出")
- 可以排序吗?
# 1. 三支军团:内部已按战力从强到弱排布
three_king = [
(99, 80), # 吕布
(97, 75), # 张飞
(96, 93) # 关羽
]
water_margin = [
(96, 65), # 武松
(95, 88), # 林冲
(93, 60) # 李逵
]
sui_tang = [
(100, 70), # 李元霸
(98, 82), # 宇文成都
(95, 78) # 裴元庆
]
# 2. 装进总队伍列表
all_army = [three_king, water_margin, sui_tang]
# 3. 整体降序排序:实力最强放前面
rank_result = sorted(all_army, reverse=True)
# 4. 对应名字方便看懂
name_map = {
str(three_king): "三国军团",
str(water_margin): "水浒军团",
str(sui_tang): "隋唐军团"
}
# 5. 打印最终排行
print("=== 三大军团 实力总排行 ===")
for idx, team in enumerate(rank_result, 1):
print(f"第{idx}名:{name_map[str(team)]} 战力阵容:{team}")
- 列表和元组之间可以比较吗?
(1, 2) == [1, 2, 3]
(1, 2) == [1, 2]
- 只能判断是否相等或不等
- 但是不能判断大于小于
- 手册怎么说?
- 只能比较是否相等
- 但是 结果是 False
- 因为类型都不相等
- 这次研究下面这些类的比较运算符
- 字符串 str
- 字节序列 bytes
- 列表 list
- 元组 tuple
整体的口诀还是
从前往后,有大于无
- 如果有嵌套的列表之类的东西
- 就比较这两个列表
- 如果此子列表中还有列表
- 就继续比较下去
- 直到分出大小
- 除了列表之外还有什么容器呢?🤔
- 下次再说 👋
- 本文来自 oeasy Python 系统教程。
- 想完整、扎实学 Python,
- 搜索 oeasy 即可。































