当前位置: 首页 > news >正文

oeasy Python 119 多维列表排序_sorted_key_lambda

119用lambda表达式给多维列表排序

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

多维列表排序_sorted_key_lambda

回忆

  • ​​配套视频​​
  • 上次 我们 了解了列表的 嵌套(embedded)
  • 列表项 也可以是 列表
  • 可以 一直 嵌套下去

  • 数字 不只是 简单的数字
  • 在 ​​结构​​ 中的数字
  • 可以 在结构中随机
  • 也可以 在结构中 ​​排序​​ 吗?
回忆排序
import random lst = list(range(5)) print(lst) random.shuffle(lst) print(lst) lst.sort() print(lst)
  • 传统 排序

继续
  • 构造列表
lst = [[1], [0]] lst.sort() lst
  • 真的排了

  • 咋排的呢??
官方手册
  • 官方手册 有啥说法 吗?
  • ​​https://docs.python.org/3/reference/expressions.html#value-comparisons​​

Sequences compare lexicographically ...

  • lexicographically 怎么理解?
lexicographically
  • lexicographically
  • /ˌleksɪkəˈɡræfɪkli/
  • 字典序地

单词

中文

lexicon

词典

lexical

词汇的

lexicology

词汇学

lexicography

词典编纂

lexicographer

词典编纂者

lexicographical

字典序的

lexicographically

按字典序

  • lexico - 词典编纂

部分

含义

作用

lexico-

词、词汇

词根

-graph-

写、记录

词根

-y

名词后缀

表行为/学科

-ical

形容词后缀

……的

-ly

副词后缀

……地

翻译

Sequences compare lexicographically using comparison of corresponding elements.

序列的比较 字典序地进行

即依次对比 两者对应位置的 元素

[1, 0, 1] < [1, 1, 0]
  • 依次对比对应位置的元素
  • 先比较 第0个列表项
  • 相同
  • 再比较 第1个列表项
  • 不相同

  • 什么结构 都能排序 吗?
准备
  • lst 有两个列表项
  1. 数字0
  2. 列表[1]
lst = [0, [1]] lst.sort()
  • 能 排序 吗?
排序前提
  • 不能排序

  • 排序的前提
  • 得能 先 比大小
先比大小
0 < [1]
  • 报同样的错
  • ​列表型​​ 和 ​​整型​
  • 不能 比大小

  • 数值 很重要
  • 整体数据​​结构​
  • 数据所在​​位置​
  • ​更重要​​!!!
数据结构
  • 数据结构 和 位置
  • 比具体的 数值 更重要
  • 结构不对
  • 没有 比都没法比
  • 更别说排序了

  • 除了 list.sort方法 之外
  • 还有 什么 排序方法?
询问
  • 内建函数 sorted
  • 有什么​​区别​​ 来着?🤔

  • 不同之处
  • list.sort 改原列表
  • sorted 是 新建列表
  • 具体怎么排序?
代码
  • 二维列表
  1. 姓名
  2. 数学
  3. 语文
student_list = [ ["张三", 85, 92], ["李四", 98, 89], ["王五", 76, 88], ["赵六", 90, 95], ["钱七", 82, 78] ]
  • 想 按照 数学排序
数学 成绩

  • 数学成绩
  • 索引位置 为 1
shuxue = sorted(student_list, key=lambda x: x[1]) shuxue
  • 排序的关键key
  • 用的是 lambda

lambda x: x[1]

  • 具体来说 什么是 lambda?
lambda表达式
  • lambda 是
  • 没有名字的临时函数
  • 匿名函数
lambda x: x[1]
  • 适合像 排序key 这种
  • 临时用一次的 简单逻辑场景

  • 那 为什么叫做 lambda 呢?
lambda名字由来
  • 1930 年代
  • 由数学家阿隆佐・丘奇
  • 提出的一套数学逻辑系统
  • 核心是 “用匿名函数来表达计算逻辑”
  • λ 演算
  • Lambda Calculus

λ 演算里

  • 本身就是公式
  • 不用 函数名

彻底聚焦 “做什么”

而不是 “叫什么”

  • 可以按照 语文成绩 排序吗?
照猫画虎

  • 参考因素 修改为
  • 第2项 语文成绩
yuwen = sorted(student_list, key=lambda x: x[2]) yuwen
  • 效果

  • 可以从 高到低吗?
reverse
help(sorted)
  • 查到参数

  • 设置逆向
reverse=True
  • 从高到低

  • 比较的原则是

reverse=True

  • 想按平均分排序
平均分
  • 平均分 = (数学 + 语文) / 2
  • key=lambda x: (x[1] + x[2])/2
average = sorted(student_list, key=lambda x: (x[1] + x[2])/2, reverse=True)

lambda x: (x[1] + x[2])/2

  • 可以 有不同权重吗?
权重
  • 按照 权重排序
  • 加权分 = 数学×0.6 + 语文×0.4
  • key=lambda x: x[1]*0.6 + x[2]*0.4
average = sorted(student_list, key=lambda x: x[1]*0.6 + x[2]*0.4, reverse=True)
  • 排序 的 核心 是 权重
反思
  • 今天的 生活
  • 已经离不开
  • 加权排序
  1. 购物
  2. 内容推荐

  • 权重的配比 来自 lambda表达式
  • 可以 按姓名 排序 吗?
姓名排序
pip install pypinyin pypinyin[stroke] # 安装拼音库+笔画扩展
  • 先安装类库
student_list = [ ["张三", 85, 92], ["李四", 98, 89], ["王五", 76, 88], ["赵六", 90, 95], ["钱七", 82, 78] ] # 按姓名拼音精准排序 try: from pypinyin import lazy_pinyin print("===== 方法2:按姓名拼音精准升序排序 =====") # 按姓名的拼音字符串排序 sorted_by_name_pinyin = sorted(student_list, key=lambda x: ''.join(lazy_pinyin(x[0]))) for student in sorted_by_name_pinyin: name, math, chinese = student print(f"姓名:{name},数学:{math},语文:{chinese}") except ImportError: print("⚠️ 未安装pypinyin库,无法执行拼音精准排序!请先执行:pip install pypinyin") print("-" * 60)
  • 这次的lambda表达式
  • 调用了 lazy_pinyin函数

  • 还 可以 怎么排序?
按照 字符串长度 排序
  • 能 比大小
  • 就能 排序
# 模拟短信数据:[内容, 发送时间] messages = [ ["【验证码】6897,5分钟内有效", "2026-03-06 10:00"], # 16字 ["恭喜您获得XX平台优惠券,点击链接领取...(省略50字)", "2026-03-06 09:50"], # 60字 ["您的银行卡尾号1234入账500元", "2026-03-06 09:40"], # 18字 ["XX楼盘特价出售,首付20万起...(省略40字)", "2026-03-06 09:30"] # 50字 ] # 按短信内容长度升序(有效短短信在前) sorted_messages = sorted(messages, key=lambda x: len(x[0])) print("按短信长度排序(有效短信优先):") for content, time in sorted_messages: print(f"[{time}] {content[:20]}... ({len(content)}字)")
  • 任务达成

总结
  • 这次我们 了解了 多维列表排序
  • 默认是 直接比大小

  • 可迭代对象students
  • 对于students中的 每次迭代的x
  • 可以按照 lambda表达式 排序
  • 多维列表 的 赋值
  • 有 什么​​特点​​ 吗??🤔
  • 下次再说 👋
  • ​​配套视频​​
  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。
http://www.jsqmd.com/news/579477/

相关文章:

  • Phi-4-mini-reasoning应用场景:科研助理——论文公式推导验证与符号计算辅助
  • 6 鸿蒙应用启动速度优化全流程拆解 | 鸿蒙开发筑基实战
  • Swift 可选链
  • OpenClaw压力测试:Qwen3-14B持续运行24小时稳定性报告
  • C++ 异常安全与 RAII 模式结合
  • [具身智能-195]:在Windows和Linux下的Node.js 环境的安装和配置
  • FastAPI依赖注入与测试的艺术
  • SecGPT-14B模型微调:提升OpenClaw安全任务执行准确率
  • Unity性能优化终极利器:MeshFusion Pro
  • 单例模式全解析:5种写法 + 破坏与防护
  • DPU协议卸载功能详解
  • OpenClaw+Phi-3-vision-128k-instruct安全方案:敏感数据本地化处理指南
  • 基于MATLAB的悬臂梁前3阶固有频率和振型求解(假设模态法、解析法、瑞利里兹法)
  • SenseVoice-Small ONNX精彩案例分享:10分钟会议录音→带标点可编辑文本
  • 2026年4月深度横评|五款主流远程控制软件,到底谁才是你的“设备桥梁”?
  • Go 并发锁的底层实现原理
  • OpenClaw压力测试:Qwen3-14B在并发请求下的响应延迟分析
  • 服务器安全审计与入侵检测
  • 深入探索Java JPA中的CriteriaQuery
  • OpenClaw性能调优:降低Phi-3-mini-128k-instruct长任务token消耗的技巧
  • 颜色代码选择助手源码前端开发HEX颜色值十六进制一键复制创意设计色彩搭配软件工具+安卓APP
  • PyTorch 2.8高性能镜像案例分享:RTX 4090D上FlashAttention-2加速LLM微调实测
  • API 测试工具:Postman, Rest-Assured
  • 【Guava】并发编程ListenableFutureService
  • Kandinsky-5.0-I2V-Lite-5s图生视频实战教程:5秒短视频一键生成(RTX4090D友好)
  • SEO_避开这些SEO误区让你的优化更高效
  • MeteorSeed
  • 基于S7-1200PLC的物业供水控制系统设计》 PLC触摸屏,图纸,博图16 一、设计任务书...
  • C++ STL 容器线程安全机制研究
  • 彻底搞懂大模型“图谱推理”底层逻辑!TPAMI神作全解(非常详细)