如何在 Python 中使用 lambda 函数与 filter() 函数

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本教程中,我们将探讨如何在 Python 中结合使用 lambda 函数和 filter() 函数。Lambda 函数提供了一种简洁的方式来定义匿名函数,而 filter() 函数则允许我们有选择地将这些函数应用于序列的元素。通过理解如何结合使用这些强大的工具,你将能够编写更高效、更具表现力的 Python 代码。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/arguments_return("Arguments and Return Values") python/FunctionsGroup -.-> python/lambda_functions("Lambda Functions") python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") subgraph Lab Skills python/function_definition -.-> lab-415783{{"如何在 Python 中使用 lambda 函数与 filter() 函数"}} python/arguments_return -.-> lab-415783{{"如何在 Python 中使用 lambda 函数与 filter() 函数"}} python/lambda_functions -.-> lab-415783{{"如何在 Python 中使用 lambda 函数与 filter() 函数"}} python/build_in_functions -.-> lab-415783{{"如何在 Python 中使用 lambda 函数与 filter() 函数"}} end

理解 Python 中的 Lambda 函数

Lambda 函数,也称为匿名函数,是在 Python 中定义小型单行函数的一种简洁方式。当你在短时间内需要一个简单函数,而无需定义具名函数时,它们特别有用。

Lambda 函数的语法如下:

lambda arguments: expression

在此,lambda 关键字用于定义函数,后跟参数,然后是冒号 : 和要计算的表达式。

Lambda 函数通常与其他高阶函数(如 map()filter()reduce())结合使用,以对数据执行各种操作。

以下是一个对数字求平方的 Lambda 函数示例:

square = lambda x: x**2
print(square(5))  ## 输出:25

在这个示例中,Lambda 函数 lambda x: x**2 被赋给变量 square。当我们调用 square(5) 时,Lambda 函数被执行,结果 25 被打印出来。

当你在短时间内需要一个简单函数,而无需定义具名函数时,Lambda 函数特别有用。它们可以使你的代码更简洁易读,尤其是在与其他高阶函数结合使用时。

将 Lambda 与 filter() 函数结合使用

Python 中的 filter() 函数是一个内置函数,它接受一个函数和一个可迭代对象(如列表、元组或字符串)作为参数,并返回一个迭代器,该迭代器只包含可迭代对象中函数返回 True 的元素。

当与 lambda 函数结合使用时,filter() 函数成为根据自定义标准过滤数据的强大工具。

以下是使用 filter() 和 lambda 函数过滤数字列表并只保留偶数的示例:

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]

在这个示例中,lambda 函数 lambda x: x % 2 == 0 检查 numbers 列表中的每个数字 x 是否为偶数(即 x 除以 2 的余数是否为 0)。然后,filter() 函数将这个 lambda 函数应用于 numbers 列表中的每个元素,并返回一个只包含偶数的迭代器。最后,我们使用 list() 函数将迭代器转换为列表以显示结果。

filter() 函数也可以与具名函数而不是 lambda 函数一起使用。例如:

def is_even(x):
    return x % 2 == 0

even_numbers = list(filter(is_even, numbers))
print(even_numbers)  ## 输出:[2, 4, 6, 8, 10]

在这种情况下,is_even() 函数执行与上一个示例中的 lambda 函数相同的任务。

通过将 lambda 函数与 filter() 函数结合使用,你可以在 Python 代码中创建简洁高效的数据过滤解决方案。

Lambda 和 filter() 的实际应用

Lambda 函数和 filter() 函数可用于各种实际应用场景。以下是一些示例:

过滤字典列表

假设你有一个表示员工数据的字典列表,并且你想过滤该列表以找到所有具有特定职位的员工。你可以使用带有 filter() 的 lambda 函数来实现这一点:

employees = [
    {"name": "John Doe", "job_title": "Manager"},
    {"name": "Jane Smith", "job_title": "Developer"},
    {"name": "Bob Johnson", "job_title": "Manager"},
    {"name": "Alice Williams", "job_title": "Designer"}
]

managers = list(filter(lambda emp: emp["job_title"] == "Manager", employees))
print(managers)
## 输出: [{'name': 'John Doe', 'job_title': 'Manager'}, {'name': 'Bob Johnson', 'job_title': 'Manager'}]

从字典列表中提取特定值

与上一个示例类似,你可以使用带有 map() 的 lambda 函数从字典列表中提取特定值:

names = list(map(lambda emp: emp["name"], employees))
print(names)
## 输出: ['John Doe', 'Jane Smith', 'Bob Johnson', 'Alice Williams']

过滤和转换数据

你可以将 filter()map() 与 lambda 函数结合使用,以执行更复杂的数据转换。例如,假设你有一个数字列表,你想创建一个只包含偶数但值翻倍的新列表:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
doubled_even_numbers = list(map(lambda x: x * 2, filter(lambda x: x % 2 == 0, numbers)))
print(doubled_even_numbers)
## 输出: [4, 8, 12, 16, 20]

在这个示例中,filter() 函数用于仅选择偶数,而 map() 函数用于将每个偶数的值翻倍。

这些只是你可以在实际应用中使用 lambda 函数和 filter() 函数的几个示例。这种组合的灵活性和简洁性使其成为 Python 中数据操作和处理的强大工具。

总结

在本教程结束时,你将对如何在 Python 中应用 lambda 函数和 filter() 函数有扎实的理解。你将学习到实用的应用场景和技巧,这些将提升你的 Python 编程技能,并使你能够编写更简洁、更高效的代码。