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函数的要求:必须接受一个参数(列表中的元素),并返回一个可比较的值(如数字、字符串)。
典型用途:处理大小写、提取字段、计算衍生值(如绝对值、长度)等。