Python案例如何运用lambda函数?

wen python案例 82

本文目录导读:

Python案例如何运用lambda函数?

  1. 与sorted()配合使用
  2. 与filter()配合使用
  3. 与map()配合使用
  4. 与reduce()配合使用
  5. 列表排序的进阶应用
  6. 在实际问题中的应用
  7. 创建简单的计算器
  8. 创建排序比较器
  9. 使用建议

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}]

使用建议

  1. 适合场景:简单的单行函数操作
  2. 不适合场景:复杂的逻辑或多行代码
  3. 可读性:简单操作时lambda更清晰,复杂操作应使用def定义

lambda函数不应该取代普通的函数定义,而是在需要简洁表达式的场景下使用。

抱歉,评论功能暂时关闭!