Python 中的 map, filter 和 reduce 及示例2024 年 8 月 29 日 | 阅读 12 分钟 Python 流Python 流(stream)是指一种特殊的数据处理范式,它涉及对数据项在通过一系列处理过程时进行的顺序处理。 流允许数据处理是连续的、有效的且内存友好的,而无需将整个数据集加载到内存中。 Python 中的 map、filter 和 reduce 函数是作用于数据序列(如列表或其他可迭代对象)的高阶函数。流可以与这些方法结合使用。借助这些函数,您可以快速有效地分析序列元素上的典型数据。 什么是函数式编程?函数式编程是一种编程范式,它将计算视为数学函数的求值,并避免更改状态和可变数据。 在函数式编程中,函数是头等公民,这意味着它们可以被赋值给变量,作为参数传递给其他函数,并作为值从其他函数返回。 函数式编程强调不变性,即一旦赋值,值就不能被更改,并且它避免了副作用,即影响函数结果(超出其返回值)的状态或行为的更改。 在 Python 中,可以通过多种特性和工具实现函数式编程,例如: 1. 高阶函数 - Python 允许将函数赋值给变量、将函数作为参数传递以及将函数作为值返回。高阶函数是指接受其他函数作为参数或返回其他函数作为结果的函数,并可因此作为结果。 通过高阶函数可以实现强大的函数式编程技术,如将函数作为参数传递、从函数返回函数以及动态创建函数。 2. Lambda 函数 - Lambda 函数,也称为匿名函数,可以在不要求正式函数声明的情况下内联定义,是简短的一次性使用的函数。 它们对于执行只需要一行代码即可传达的单个任务很有用。 3. map, filter, 和 reduce - Map、Filter 和 Reduce 是 Python 的内置函数,可用于函数式编程任务。 借助这些操作,您可以使用 'map' 将特定函数应用于序列项,使用 'filter' 根据条件过滤序列元素,并使用 'reduce' 累积地聚合元素。 4. 列表推导式 - Python 支持列表推导式,这是一种简单且富有表现力的方法,可以从旧列表构建新列表。 可以使用列表推导式实现映射、过滤和聚合等函数式编程技术。 让我们深入探讨 Python 中的 map()、filter() 和 reduce() 函数。 1. map() - Python 的 map() 方法将指定的函数应用于可迭代对象(如列表、元组或字符串)的每个项,然后返回一个包含结果的新可迭代对象。 map() 的语法如下:map(function, iterable) 传递给 map 函数的第一个参数本身是一个函数,第二个参数是一个可迭代对象(元素序列),例如列表、元组、集合、字符串等。 示例 1 - map() 的用法 输出 1, 4, 9, 16, 25 Squares: [1, 4, 9, 16, 25] 在这里,map 函数从数据(从 x = 1 开始)中逐个获取每个元素。每个元素都传递给 lambda 函数,返回其平方。返回的值存储在 map 对象(一个可迭代对象)中。 示例 2 众所周知,输入值始终是字符串。对于单值输入,我们可以使用 'int' 函数将其转换为整数,使用 'float' 函数将其转换为浮点数。但对于流式输入,我们可以使用 map() 函数来实现。 输出 Enter integer values: 24 5 6 84 2 6 Integer data = [24, 5, 6, 84, 2, 6] Enter Floating values: 25.4 2.6 1.9 0.6 3 5 Float data = [25.4, 2.6, 1.9, 0.6, 3.0, 5.0] 示例 3:传递多个可迭代对象 给定两个列表。一个包含基值,另一个包含幂值。您需要找到第一个列表中每个 x 和第二个列表中每个 y 的 x**y。 输出 Answer: [2, 16, 216, 4096, 100000] 如我们所知,pow(x, y) 接受两个参数并返回 x**y。在上面的示例中,map 函数依次从 base 和 power 中取一个元素,并将它们传递给 pow 函数,直到所有元素都被处理完毕。最后,它返回一个 map 对象,该对象随后被类型转换为列表并存储在名为 'answer' 的变量中。 2. filter() - Python 的 filter() 函数根据给定的条件或函数过滤可迭代对象中的元素,并返回一个包含过滤后元素的新可迭代对象。 filter() 的语法如下:filter(function, iterable) 这里,传递给 filter 函数的第一个参数本身是一个函数,第二个参数是一个可迭代对象(元素序列),例如列表、元组、集合、字符串等。 示例 1 - filter() 的用法 给出一个整数列表,应从中过滤出偶数。 输出 2 4 Evens = [2, 4] 示例 2:过滤完全平方数 给出一个随机整数列表,应从中过滤出完全平方数。完全平方数是指可以表示为同一个整数的乘积的数字。 输出 Answer: [0, 1, 4, 9, 16, 81, 36] 在上面的示例中,我们有一个包含一些随机整数的数据列表。'isPerfectSqr' 函数对于完全平方数返回 True,对于其他数字返回 False。filter 函数从数据中过滤出是完全平方数的数字,并返回一个包含这些完全平方数的可迭代对象。最后,我们将结果转换为列表并打印到控制台。 示例 3:过滤出以 H 开头的姓名 给出一个包含人名的列表,您应该过滤出以字母 'H' 开头的姓名。以下是问题解决方案 输出 Method 1 result = ['Harsh', 'Harry', 'Hassi'] Method 2 result = ['Harsh', 'Harry', 'Hassi'] 在上面的示例中,lambda 函数或 H_name 函数对于 names 中以字母 H 开头的每个 x 返回 true。filter 函数过滤所有满足条件的姓名。 3. reduce() - 在 Python 中,reduce() 是一个内置函数,它将给定函数应用于可迭代对象的元素,将它们缩减为单个值。 reduce() 的语法如下:reduce(function, iterable[, initializer]) function 参数 是一个函数,它接受两个参数并返回一个单一值。第一个参数是累积值,第二个参数是来自可迭代对象的当前值。 iterable 参数是要缩减的值的序列。 可选的 initializer 参数用于为累积结果提供初始值。如果未指定 initializer,则使用可迭代对象的第一个元素作为初始值。 这是一个演示如何使用 reduce() 计算数字列表之和的示例 示例 1 给出一个包含一些整数的列表,您应该使用 reduce 函数找到列表中所有元素的总和。以下是问题解决方案 输出 Sum of the integers of num_list : 55 Sum of the integers of num_list with initial value 10 : 65 在上面的示例中,reduce 函数在第一次迭代中从 num_list 中取出两个元素 1 和 2,并将它们传递给 add 函数。add 函数返回 1 和 2 的和,即 3。在第二次迭代中,reduce 函数传递上一次调用的结果(即 3)和下一个元素(也是 3)。此过程一直重复,直到所有元素都被处理。 在传递初始值 (10) 的情况下,reduce 函数在第一次迭代中从 num_list 中取一个元素和初始值 (10),并将它们传递给 add 函数。 示例 2:将 operator 函数与 reduce 函数一起使用 在下面的示例中,我们使用 operator.add 执行加法,operator.mul 执行乘法,operator.concat 执行字符串连接。 输出 Sum of all elements in my_list1 : 15 Product of all elements in my_list1 : 120 Concatenated string by using operator.concat : ILoveJavatpoint Concatenated string by using operator.add : ILoveJavatpoint 这里,reduce 函数中的 function 参数被 operator 函数替换。所有步骤与前面的示例相同。 示例 3:找出给定数字中的最大值。 在此示例中,给出一个整数列表,您应该使用 reduce 函数找到最大数字。以下是问题解决方案 有三种方法可以实现相同的结果 方法 1 - 使用普通函数 方法 2 - 使用 Lambda 函数 方法 3 - 使用 max 函数 输出 Largest found with method 1: 88 Largest found with method 2: 88 Largest found with method 3: 88 在上面的示例中,large 函数、lambda 函数和 max 函数将 x 和 y 中的最大值返回给 reduce 函数。reduce 函数逐个解析所有元素。最后,它返回所有元素中的最大值。 结论总而言之,map()、filter() 和 reduce() 是 Python 中常用的内置函数,它们常用于函数式编程。
这些函数或工具为您提供了强大而快速的数据处理功能,使数据转换、过滤和聚合变得简单。它们经常在 Python 的函数式编程概念中使用,以创建可读且高效的代码。 下一主题Python 编辑距离 |
在每种编程语言中,确定给定字符串是否包含子字符串是最常见的操作之一。Python 有多种方法可以确定给定字符串是否包含某个字符。“in”运算符是 Python 中用于比较操作的工具,它...
阅读 3 分钟
TIFF 文件格式用于存储光栅化图像。一个名为 GDAL 地理空间数据抽象库的库专门用于读取这些光栅文件,以及其他文件格式,例如矢量格式。gdal 库是……的一部分
阅读 2 分钟
数据框的值会逐步被其他品质所取代。这与使用 .loc 或 .iloc 进行更新不同,后者要求您指定一个位置以用某个值进行更新。to_replace: str, regex, list, dict, Series, int, float, or None 查找的最有效方法...
阅读 15 分钟
接下来是一个抽象的理论语法,用于定义 DOT 语言的特性。终结符以醒目的文本样式显示,非终结符以斜体显示。确切的字符用单引号给出。括号(和)在需要时表示分组。方括号 [ 和 ] 包含...
阅读 6 分钟
Python 的 eval() 和 exec() 函数是强大的工具,允许在程序中动态执行代码。虽然它们乍一看可能相似,但它们在功能和目的上存在明显的差异。在本文中,我们将通过示例详细探讨这些函数以说明其功能...
阅读 6 分钟
自动化重复性工作是一个好主意。开发人员和系统管理员经常使用 shell 脚本来自动化重复性过程,例如健康检查和文件备份。然而,随着这些活动变得越来越复杂,shell 脚本可能会变得更难以维护。幸运的是,Python 可以用于...
阅读 22 分钟
在本文中,我们将讨论 Python win32 进程。我们还将逐一讨论其方法。基本上,Win32 进程是 Python 中的一个方法。此模块提供了扩展的 Win32 进程创建和管理功能。Create 方法创建进程对象(...
阅读9分钟
在本文中,您将学习如何安装 Bokeh(及其依赖项)以及使用 Bokeh 进行可视化的基本构建块。此外,您还将发现如何设计和自定义简单的图表。什么是 Bokeh?一个名为 Bokeh 的 Python 模块被用来创建高度交互的...
阅读 3 分钟
在本教程中,我们将理解 Python 中属性和特性之间的区别。Python 中的一切都是对象,每个类都有属性、方法或函数。当我们使用面向对象编程语言时,我们会遇到术语——属性和特性。在术语中...
阅读 3 分钟
什么是 IDE?集成开发环境(IDE)软件使用编辑器和编译器等工具来构建程序。它在用多种语言编程时具有很大的潜力,可以成为一个有用的工具。它是一块软件,结合了所有...
11 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India