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

list.sort(*, key=None, reverse=False)的两个问题

在python官网中,5.1. More on Lists,list.sort()是关于排序的方法。

list.sort(*, key=None, reverse=False) 中有两个问题:

  • * 是什么意思
  • key有什么作用

* 是什么意思

* 表示后面必须是关键字参数,具体见python官网4.9.3.5. Recap里有

def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):

(1) / 和* 符号是可选的。
(2) / 之前是只能传递位置参数。
(3) / 和 * 之间是传递位置参数或者关键字参数。
(4) * 之后只能是传递关键字参数。
(5) 关键字参数又叫命名参数。

key有什么作用

key参数的作用是指定一个函数,用于为每个元素生成一个排序的“依据值”。排序时,列表会根据每个元素调用key函数后的返回值进行比较,而不是直接比较原始元素本身。

通俗解释:

key的作用是告诉Python:“排序时,请用这个函数处理一下元素,然后按处理后的结果来排序”。

它不会修改列表中的实际元素,只是临时生成一个值作为排序依据。

常见应用场景和示例:

按字符串长度排序
words = ["apple", "banana", "cherry", "date"]
words.sort(key=len)
print(words)  # 输出:['date', 'apple', 'banana', 'cherry'](按长度4,5,6,6排序)
按小写字母排序(不区分大小写)
names = ["Alice", "bob", "Charlie", "dave"]
names.sort(key=str.lower)  # 全部转小写后再比较
print(names)  # 输出:['Alice', 'bob', 'Charlie', 'dave']
按元组的某个字段排序
students = [("Alice", 90), ("Bob", 85), ("Charlie", 95)]
students.sort(key=lambda x: x[1])  # 按分数排序
print(students)  # 输出:[('Bob', 85), ('Alice', 90), ('Charlie', 95)]
按字典的某个键排序
data = [{"name": "Alice", "age": 25}, {"name": "Bob", "age": 20}]
data.sort(key=lambda x: x["age"])  # 按年龄排序
print(data)  # 输出:[{'name': 'Bob', 'age': 20}, {'name': 'Alice', 'age': 25}]

对比 key 和 reverse:

key:定义排序的依据(如按长度、按字段)。
reverse:控制升序或降序(reverse=True时降序)。

组合使用示例:

words = ["apple", "banana", "cherry", "date"]
words.sort(key=len, reverse=True)  # 按长度降序
print(words)  # 输出:['banana', 'cherry', 'apple', 'date']

总结:

key的核心作用:自定义元素的排序规则,让复杂对象的排序更灵活。

key函数的要求:必须接受一个参数(列表中的元素),并返回一个可比较的值(如数字、字符串)。

典型用途:处理大小写、提取字段、计算衍生值(如绝对值、长度)等。

http://www.lryc.cn/news/2392374.html

相关文章:

  • 文档处理的相关工具
  • java基础(面向对象进阶高级)内部类
  • 使用Python,OpenCV,Tesseract-OCR对自己的运动数据图片进行识别及分析,并使用Matplotlib绘制配速图出来
  • 小白的进阶之路系列之七----人工智能从初步到精通pytorch自动微分优化以及载入和保存模型
  • 创建型模式之 Builder (生成器)
  • 智能物资出入库管控系统
  • 鸿蒙OSUniApp 制作倒计时与提醒功能#三方框架 #Uniapp
  • 深入剖析网络协议:七层协议与四层协议详解
  • 机器学习-线性回归基础
  • 自学嵌入式 day 25 - 系统编程 标准io 缓冲区 文件io
  • [Vue组件]半环进度显示器
  • 科技赋能建筑行业,智能楼宇自控系统崭露头角成发展新势力
  • Rust入门之并发编程基础(一)
  • 高级特性实战:死信队列、延迟队列与优先级队列(二)
  • VR 电缆故障测试系统:技术革新​
  • Rocky Linux上安装Go
  • 深度学习论文: FastVLM: Efficient Vision Encoding for Vision Language Models
  • 白杨SEO:做AI搜索优化的DeepSeek、豆包、Kimi、百度文心一言、腾讯元宝、通义、智谱、天工等AI生成内容信息采集主要来自哪?占比是多少?
  • 显示docker桌面,vnc远程连接docker
  • Web 端顶级视效实现:山海鲸端渲染底层原理与发布模式详解
  • 腾讯云国际站性能调优
  • 深入解析操作系统内核与用户空间以及内核态与用户态转换
  • 每日一题洛谷P8662 [蓝桥杯 2018 省 AB] 全球变暖c++
  • 【JVM】初识JVM 从字节码文件到类的生命周期
  • 多级体验体系构建:基于开源AI智能客服与AI智能名片的S2B2C商城小程序体验升级路径研究
  • 每日算法 -【Swift 算法】字符串转整数算法题详解:myAtoi 实现与正则表达式对比
  • 记录一个难崩的bug
  • Git切换历史版本及Gitee云绑定
  • 智能外呼系统中 NLP 意图理解的工作原理与技术实现
  • 服务器的IP是什么东西?