oeasy Python 119 多维列表排序_sorted_key_lambda

张开发
2026/5/18 5:13:22 15 分钟阅读
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 怎么理解lexicographicallylexicographically/ˌ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 有两个列表项数字0列表[1]lst [0, [1]] lst.sort()能 排序 吗排序前提不能排序排序的前提得能 先 比大小先比大小0 [1]报同样的错​​列表型​​ 和 ​​整型​​不能 比大小数值 很重要整体数据​​结构​​数据所在​​位置​​​​更重要​​数据结构数据结构 和 位置比具体的 数值 更重要结构不对没有 比都没法比更别说排序了除了 list.sort方法 之外还有 什么 排序方法询问内建函数 sorted有什么​​区别​​ 来着不同之处list.sort 改原列表sorted 是 新建列表具体怎么排序代码二维列表姓名数学语文student_list [ [张三, 85, 92], [李四, 98, 89], [王五, 76, 88], [赵六, 90, 95], [钱七, 82, 78] ]想 按照 数学排序数学 成绩数学成绩索引位置 为 1shuxue sorted(student_list, keylambda x: x[1]) shuxue排序的关键key用的是 lambdalambda x: x[1]具体来说 什么是 lambdalambda表达式lambda 是没有名字的临时函数匿名函数lambda x: x[1]适合像 排序key 这种临时用一次的 简单逻辑场景那 为什么叫做 lambda 呢lambda名字由来1930 年代由数学家阿隆佐・丘奇提出的一套数学逻辑系统核心是 “用匿名函数来表达计算逻辑”λ 演算Lambda Calculusλ 演算里本身就是公式不用 函数名彻底聚焦 “做什么”而不是 “叫什么”可以按照 语文成绩 排序吗照猫画虎参考因素 修改为第2项 语文成绩yuwen sorted(student_list, keylambda x: x[2]) yuwen效果可以从 高到低吗reversehelp(sorted)查到参数设置逆向reverseTrue从高到低比较的原则是reverseTrue想按平均分排序平均分平均分 (数学 语文) / 2keylambda x: (x[1] x[2])/2average sorted(student_list, keylambda x: (x[1] x[2])/2, reverseTrue)lambda x: (x[1] x[2])/2可以 有不同权重吗权重按照 权重排序加权分 数学×0.6 语文×0.4keylambda x: x[1]*0.6 x[2]*0.4average sorted(student_list, keylambda x: x[1]*0.6 x[2]*0.4, reverseTrue)排序 的 核心 是 权重反思今天的 生活已经离不开加权排序购物内容推荐权重的配比 来自 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, keylambda 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 [ [【验证码】68975分钟内有效, 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, keylambda 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 即可。

更多文章