本文目录导读:

Lambda函数(匿名函数)在Python中非常实用,特别是在需要简洁函数的场景,我来给你展示几个典型案例:
与sorted()配合使用
# 按字典中的值排序
students = [
{'name': 'Alice', 'grade': 88},
{'name': 'Bob', 'grade': 95},
{'name': 'Charlie', 'grade': 72}
]
# 按成绩从低到高排序
sorted_students = sorted(students, key=lambda x: x['grade'])
print(sorted_students)
# 输出: [{'name': 'Charlie', 'grade': 72}, {'name': 'Alice', 'grade': 88}, {'name': 'Bob', 'grade': 95}]
# 按成绩从高到低排序
sorted_students_desc = sorted(students, key=lambda x: x['grade'], reverse=True)
print(sorted_students_desc)
# 输出: [{'name': 'Bob', 'grade': 95}, {'name': 'Alice', 'grade': 88}, {'name': 'Charlie', 'grade': 72}]
与filter()配合使用
# 过滤出偶数 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] even_numbers = list(filter(lambda x: x % 2 == 0, numbers)) print(even_numbers) # 输出: [2, 4, 6, 8, 10] # 过滤出长度大于3的字符串 words = ['cat', 'dog', 'elephant', 'tiger', 'bird'] long_words = list(filter(lambda w: len(w) > 3, words)) print(long_words) # 输出: ['elephant', 'tiger', 'bird']
与map()配合使用
# 将摄氏度转换为华氏度 celsius = [0, 10, 20, 30, 40] fahrenheit = list(map(lambda c: (c * 9/5) + 32, celsius)) print(fahrenheit) # 输出: [32.0, 50.0, 68.0, 86.0, 104.0] # 计算平方数 numbers = [1, 2, 3, 4, 5] squares = list(map(lambda x: x ** 2, numbers)) print(squares) # 输出: [1, 4, 9, 16, 25]
与reduce()配合使用
from functools import reduce # 计算列表所有元素的和 numbers = [1, 2, 3, 4, 5] total = reduce(lambda x, y: x + y, numbers) print(total) # 输出: 15 # 计算阶乘 factorial = reduce(lambda x, y: x * y, range(1, 6)) print(factorial) # 输出: 120
列表排序的进阶应用
# 按字符串长度排序 fruits = ['apple', 'banana', 'cherry', 'date', 'elderberry'] sorted_by_length = sorted(fruits, key=lambda x: len(x)) print(sorted_by_length) # 输出: ['date', 'apple', 'cherry', 'banana', 'elderberry'] # 按元组的第二个元素排序 pairs = [(1, 'one'), (3, 'three'), (2, 'two'), (4, 'four')] sorted_pairs = sorted(pairs, key=lambda x: x[1]) print(sorted_pairs) # 输出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
在实际问题中的应用
# 案例:处理学生成绩数据
students_data = [
("Alice", [85, 92, 78, 90]),
("Bob", [95, 88, 91, 93]),
("Charlie", [72, 68, 85, 79])
]
# 计算每个学生的平均分
average_grades = list(map(lambda s: (s[0], sum(s[1])/len(s[1])), students_data))
print(average_grades)
# 输出: [('Alice', 86.25), ('Bob', 91.75), ('Charlie', 76.0)]
# 找出平均分及格的学生
passing_students = list(filter(lambda s: s[1] >= 60, average_grades))
print(passing_students)
# 输出: [('Alice', 86.25), ('Bob', 91.75), ('Charlie', 76.0)]
# 按平均分排序
top_students = sorted(average_grades, key=lambda s: s[1], reverse=True)
print(top_students)
# 输出: [('Bob', 91.75), ('Alice', 86.25), ('Charlie', 76.0)]
创建简单的计算器
# 使用lambda创建简单的数学运算函数
operations = {
'add': lambda x, y: x + y,
'subtract': lambda x, y: x - y,
'multiply': lambda x, y: x * y,
'divide': lambda x, y: x / y if y != 0 else "Cannot divide by zero"
}
# 使用示例
print(operations['add'](10, 5)) # 输出: 15
print(operations['subtract'](10, 5)) # 输出: 5
print(operations['multiply'](10, 5)) # 输出: 50
print(operations['divide'](10, 5)) # 输出: 2.0
创建排序比较器
# 按多个条件排序
data = [
{'name': 'Alice', 'age': 25, 'score': 90},
{'name': 'Bob', 'age': 22, 'score': 85},
{'name': 'Charlie', 'age': 25, 'score': 95},
]
# 先按年龄排序,再按分数排序
sorted_data = sorted(data, key=lambda x: (x['age'], -x['score']))
print(sorted_data)
# 输出: [{'name': 'Bob', 'age': 22, 'score': 85},
# {'name': 'Charlie', 'age': 25, 'score': 95},
# {'name': 'Alice', 'age': 25, 'score': 90}]
使用建议
- 适合场景:简单的单行函数操作
- 不适合场景:复杂的逻辑或多行代码
- 可读性:简单操作时lambda更清晰,复杂操作应使用def定义
lambda函数不应该取代普通的函数定义,而是在需要简洁表达式的场景下使用。