如何自定义sort
sort(key=lambda x: x[0]) 的含义
python
1
| intervals.sort(key=lambda x: x[0])
|
这行代码的意思是:按照每个区间的第一个元素(起始位置)进行排序
intervals 是一个列表,每个元素是 [start, end]
key 参数指定排序的依据
lambda x: x[0] 是一个匿名函数,输入 x(每个区间),输出 x[0](区间的起始值),这个x是任意命名的
- 排序时会根据这个输出值来决定顺序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| data = [[1, 3], [2, 6], [8, 10], [15, 18]] data.sort(key=lambda x: x[0]) data.sort(key=lambda x: x[1])
data.sort(key=lambda x: (x[0], x[1])) data.sort(key=lambda x: (x[1], x[0]))
data.sort(key=lambda x: x[0], reverse=True)
students = [ {"name": "Alice", "age": 20, "score": 85}, {"name": "Bob", "age": 22, "score": 90}, {"name": "Charlie", "age": 20, "score": 95} ] students.sort(key=lambda x: x["age"]) students.sort(key=lambda x: (x["age"], -x["score"]))
|
Lambda 的语法结构
1 2 3 4
| lambda 参数1, 参数2, ... : 返回值 ↑ ↑ ↑ 关键字 参数列表 表达式(自动返回) 参数是输入参数,返回值是输出参数
|
二、Lambda 的基本用法
1. 最简单的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| hello = lambda: "Hello World" print(hello())
double = lambda x: x * 2 print(double(5))
add = lambda x, y: x + y print(add(3, 7))
multiply = lambda x, y, z: x * y * z print(multiply(2, 3, 4))
|
三、Lambda 的常见应用场景
场景1:与 sort 配合(最常用)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| students = [("Alice", 85), ("Bob", 90), ("Charlie", 75)] students.sort(key=lambda x: x[1]) print(students)
students.sort(key=lambda x: x[0]) print(students)
people = [ {"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}, {"name": "Charlie", "age": 35} ]
people.sort(key=lambda person: person["age"]) print(people)
people.sort(key=lambda p: len(p["name"]))
|
场景2:与 map 配合(批量处理)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
numbers = [1, 2, 3, 4, 5] doubled = list(map(lambda x: x * 2, numbers)) print(doubled)
names = ["alice", "bob", "charlie"] upper_names = list(map(lambda name: name.upper(), names)) print(upper_names)
radius = [1, 2, 3, 4] areas = list(map(lambda r: 3.14 * r * r, radius)) print(areas)
|
场景3:与 filter 配合(筛选)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
numbers = [1, 2, 3, 4, 5, 6, 7, 8] evens = list(filter(lambda x: x % 2 == 0, numbers)) print(evens)
greater_than_3 = list(filter(lambda x: x > 3, numbers)) print(greater_than_3)
people = ["Tom", "Alice", "Bob", "Charlie", "Eve"] long_names = list(filter(lambda name: len(name) > 3, people)) print(long_names)
|
场景4:与 reduce 配合(累计计算)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| from functools import reduce
numbers = [1, 2, 3, 4, 5] sum_all = reduce(lambda x, y: x + y, numbers) print(sum_all)
max_num = reduce(lambda x, y: x if x > y else y, numbers) print(max_num)
factorial = reduce(lambda x, y: x * y, range(1, 6)) print(factorial)
|