本文目录导读:

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函数不应该取代普通的函数定义,而是在需要简洁表达式的场景下使用。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播