例子:
这个例子将是一个简单的“学生成绩管理系统”的片段,我们将使用lambda函数来处理学生的成绩数据。结合了匿名函数(lambda函数)与Python中的其他概念,如列表推导式、高阶函数(如filter
和sorted
)以及可能的自定义函数。
场景描述
假设我们有一个学生列表,每个学生都是一个包含姓名、年龄和成绩(列表形式,因为可能有多门课)的字典。我们需要:
- 筛选出所有成绩平均分超过60分的学生。
- 对这些学生按照他们的最高分进行排序。
- 打印出排序后学生的姓名和他们的最高分。
代码实现
# 学生列表,每个学生包含姓名、年龄和成绩(多门课)
students = [
{"name": "Alice", "age": 20, "grades": [78, 82, 85]},
{"name": "Bob", "age": 22, "grades": [55, 60, 65]},
{"name": "Charlie", "age": 21, "grades": [88, 92, 95]},
{"name": "David", "age": 19, "grades": [45, 50, 55]},
]
# 使用lambda函数和filter筛选出平均分超过60分的学生
passing_students = filter(lambda student: sum(student['grades']) / len(student['grades']) > 60, students)
# 使用列表推导式将filter对象转换为列表,便于后续操作
passing_students_list = list(passing_students)
# 使用sorted函数和lambda函数对筛选后的学生进行排序,按照最高分降序
sorted_students = sorted(passing_students_list, key=lambda student: max(student['grades']), reverse=True)
# 使用列表推导式打印出每个学生的姓名和最高分
for student in sorted_students:
print(f"{student['name']}: 最高分 {max(student['grades'])}")
# 输出:
# Charlie: 最高分 95
# Alice: 最高分 85
# Bob: 最高分 65
分析
-
筛选:我们使用
filter
函数和一个lambda函数来筛选出平均分超过60分的学生。这个lambda函数接收一个学生字典作为参数,计算学生的平均分,并与60进行比较。 -
排序:然后,我们使用
sorted
函数和一个lambda函数对筛选后的学生进行排序。这个lambda函数提取每个学生的最高分作为排序的依据,并通过设置reverse=True
来实现降序排序。 -
输出:最后,我们使用列表推导式遍历排序后的学生列表,并打印出每个学生的姓名和他们的最高分。
这个例子展示了lambda函数在处理复杂数据结构(如嵌套字典和列表)时的灵活性和强大功能。它们与Python中的其他高阶函数(如filter
和sorted
)结合使用时,可以编写出既简洁又高效的代码。
最后,如果你也想自学Python,可以关注我。我会把踩过的坑分享给你,让你不要踩坑,提高学习速度,还整理出了一套系统的学习路线,这套资料涵盖了诸多学习内容:开发工具,基础视频教程,项目实战源码,51本电子书籍,100道练习题等。相信可以帮助大家在最短的时间内,能达到事半功倍效果,用来复习也是非常不错的。