news 2026/4/18 3:53:38

【30天从零学Python】重要补充二:自定义排序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【30天从零学Python】重要补充二:自定义排序

30天从零学Python

通信工程专业科班生,用了几十年MATLAB,为了过大厂机考,不得不自学Python。

文章目录

  • 30天从零学Python
  • 重要补充二:自定义排序
  • 0. 为什么要自定义排序?
  • 1. 基础回顾:sort () 方法的核心特性
  • 2、一维数组的自定义排序:吃透 key 与 lambda
    • 2.1 场景 1:对字符串列表按 “长度” 排序
    • 2.2 场景 2:对数字列表按 “绝对值” 排序
    • 2.3 场景 3:多规则排序(优先级排序)
  • 3. 二维数组的自定义排序:按指定列 / 维度排序
    • 3.1 场景 1:按某一列的值排序
    • 3.2 场景 2:多列组合排序
  • 4. 进阶:自定义函数替代 lambda(复杂场景)
  • 总结

重要补充二:自定义排序

由于做题过程中遇到很多重要但是细碎的知识点,专门开辟一个系列总结一下。
本集重点补充一下Python中自定义排序的方法。什么是自定义排序?就是对于一个二维或者多维数组按照某一个维度进行排序。Python中列表的sort()方法在这个方面非常强大,但是需要结合隐函数的定义来实现。本集重点介绍用Python的sort方法实现自定义排序。


0. 为什么要自定义排序?

Python 内置的 sort() 方法默认只能按 “自然顺序” 排序(数字升序、字符串字典序),但实际开发中,我们经常需要按自定义规则排序:

  • 对字符串按长度排序,而非字符顺序;
  • 对二维数组按某一列的值排序;
  • 对字典 / 对象按指定属性排序;

而实现这一切的核心,就是 sort() 方法的 key 参数 + 匿名函数(lambda)—— 这也是本文要重点拆解的内容。

1. 基础回顾:sort () 方法的核心特性

先明确三个基础点,避免新手踩坑:

  1. sort() 是列表的原地排序方法(直接修改原列表,返回值是None),区别于 sorted()(返回新列表);
  2. 核心参数:
  • key:接收一个函数,该函数的返回值作为 “排序依据”;
  • reverse:布尔值,是否反转排序结果(默认 False,升序);
  1. 排序是稳定的:若两个元素的 key 值相同,保持原列表中的相对顺序。

2、一维数组的自定义排序:吃透 key 与 lambda

2.1 场景 1:对字符串列表按 “长度” 排序

默认排序:按字符串字典序;自定义排序:按字符串长度升序 / 降序。

# 原始列表str_list=["apple","banana","pear","orange","grape"]# 默认排序:按照列表中每个字符串的字典序str_list.sort()print(str_list)# 输出:['apple', 'banana', 'grape', 'orange', 'pear']# 自定义规则:按字符串长度升序(短→长)str_list.sort(key=lambdax:len(x))print("按长度升序:",str_list)# 输出:['pear', 'apple', 'grape', 'banana', 'orange']# 自定义规则:按长度降序(长→短),结合reverse参数str_list.sort(key=lambdax:len(x),reverse=True)print("按长度降序:",str_list)# 输出:['banana', 'orange', 'apple', 'grape', 'pear']
  • 关键解析:
    • key=lambda x: len(x):lambda 函数接收列表中的每个元素 x,返回 len(x)(字符串长度)作为排序依据;
    • sort() 会根据 len(x) 的值对原列表元素排序,而非元素本身。

2.2 场景 2:对数字列表按 “绝对值” 排序

默认排序:按数字大小;自定义排序:按绝对值大小。

num_list=[-10,5,-3,8,-1]# 自定义规则:按绝对值升序num_list.sort(key=lambdax:abs(x))print("按绝对值升序:",num_list)# 输出:[-1, -3, 5, 8, -10]

2.3 场景 3:多规则排序(优先级排序)

若想 “先按长度排序,长度相同则按字典序”,只需让 lambda 返回元组(元组按元素依次比较):

str_list=["apple","pear","apricot","peach","grape"]# 自定义规则:先按长度升序,长度相同按字符串字典序str_list.sort(key=lambdax:(len(x),x))print("多规则排序:",str_list)# 输出:['pear', 'apple', 'grape', 'peach', 'apricot']

3. 二维数组的自定义排序:按指定列 / 维度排序

二维数组(列表的列表)是实际开发中高频场景(如表格数据、矩阵),核心是 “指定按哪一列排序”。

3.1 场景 1:按某一列的值排序

比如二维数组存储 “姓名 - 年龄 - 成绩”,要求按 “成绩降序” 排序:

# 二维数组:[姓名, 年龄, 成绩]stu_list=[["张三",18,90],["李四",19,85],["王五",18,95],["赵六",20,85]]# 自定义规则:按成绩降序(第3列,索引为2)stu_list.sort(key=lambdax:x[2],reverse=True)print("按成绩降序:")forstuinstu_list:print(stu)# 输出:# ['王五', 18, 95]# ['张三', 18, 90]# ['李四', 19, 85]# ['赵六', 20, 85]

3.2 场景 2:多列组合排序

要求 “先按年龄升序,年龄相同按成绩降序”:

stu_list.sort(key=lambdax:(x[1],-x[2]))# -x[2] 表示成绩降序(等价于reverse=True)print("按年龄升序+成绩降序:")forstuinstu_list:print(stu)# 输出:# ['王五', 18, 95]# ['张三', 18, 90]# ['李四', 19, 85]# ['赵六', 20, 85]

4. 进阶:自定义函数替代 lambda(复杂场景)

# 复杂规则:按字符串最后一个字符排序defget_last_char(s):returns[-1]# 返回最后一个字符作为排序依据str_list=["apple","banana","pear","orange"]str_list.sort(key=get_last_char)print("按最后一个字符排序:",str_list)# 输出:['banana', 'apple', 'orange', 'pear']

总结

key 参数接收一个函数,排序时,Python 会对列表中的每一个元素都执行一次这个函数,把函数的返回值作为该元素的 “排序权重 / 依据”,最终整个列表会按照这些 “权重值” 的大小(默认升序)来重新排列元素的顺序。
key 对应的函数 func 的输入参数,就是待排序列表中的每一个独立元素。

  1. 核心结论(敲重点)
    写 list.sort(key=func) 时:
  • Python 会自动遍历列表中的每一个元素(比如列表里的 x1, x2, x3…);
  • 依次把每个元素作为唯一的参数传入 func 中;
  • func 的返回值就是这个元素的 “排序依据值”;
  • 最终列表按这些 “依据值” 排序,输出原元素。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:30:05

看模型结构 分析模型结构

from transformers import ForImageClassification model ForImageClassification.from_pretrained( "" ) print(model) 打印模型结构 Some weights of ForImageClassification were not initialized from the model checkpoint at /liujiangli-dataand …

作者头像 李华
网站建设 2026/4/11 12:13:32

超越简单问答:SUPERChem基准揭示大语言模型化学深度推理的机遇与挑战

随着以DeepSeek-R1为代表的大语言模型步入“深度思考”的新范式,人工智能在自然科学领域的探索正从表层信息检索迈向深层的复杂逻辑推理。然而,一个关键问题随之凸显:我们如何科学、精准地评估这些模型在专业科学领域,尤其是化学这…

作者头像 李华
网站建设 2026/4/16 18:11:17

Wan2.2-T2V-A14B在博物馆数字导览视频中的文物活化再现

让文物“开口说话”:Wan2.2-T2V-A14B 如何重塑博物馆数字导览 🎬🏛️ 你有没有想过,站在一件千年古董前,它突然“活”了过来——那尊静默的唐三彩仕女俑轻轻抬手梳发,窗外梅花飘落;鎏金舞马银壶…

作者头像 李华
网站建设 2026/4/17 12:58:49

仅限资深架构师查看:AZ-500云Agent安全防护的8个机密技巧

第一章:AZ-500云Agent安全防护的核心挑战 在现代云计算环境中,Azure虚拟机代理(VM Agent)作为连接本地资源与云平台管理服务的关键组件,承担着扩展管理、监控和自动化任务的重要职责。然而,随着攻击面的不断…

作者头像 李华
网站建设 2026/4/11 14:11:41

5个关键步骤实现RPCS3多实例并行:突破PS3模拟器单进程限制

5个关键步骤实现RPCS3多实例并行:突破PS3模拟器单进程限制 【免费下载链接】rpcs3 PS3 emulator/debugger 项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3 你是否曾经梦想过在同一台电脑上同时运行多个PS3游戏?比如一边在《恶魔之魂》中…

作者头像 李华
网站建设 2026/4/18 3:26:42

大语言模型与因果内积

大语言模型(LLM)并非将知识简单地存储为静态清单,而是将其编码在一个高维几何空间里,形成一种具有独特数学结构的“概念宇宙”。理解这个空间的几何特性,特别是它与经典高维空间模型的差异,是解密其工作原理…

作者头像 李华