Python 中的 map、reduce 和 filter 函数是如何工作的?


在本文中,我们将向您展示

Python 的 map()、filter() 和 reduce() 函数为该语言增添了一丝函数式编程的色彩。这三个函数都是便捷函数,可以用列表推导式或循环来代替,但对于某些问题,它们提供了更优雅、更简洁的解决方案。

map()、filter() 和 reduce() 的工作方式相同。这些函数接受一个函数和一个元素序列,并返回将接收到的函数应用于序列中每个元素的结果。

map() 函数

与 reduce() 类似,map() 函数允许您迭代可迭代对象中的每个项目。另一方面,Map() 对每个项目独立进行操作,而不是产生单个结果。

最后,map() 函数可用于对两个或多个列表执行数学运算。它甚至可以用于操作任何类型的数组。

map() 函数的时间复杂度 = O(n)

语法

map(function, iterable)

参数

  • function − 代码中要使用的函数。

  • iterable − 代码中迭代的值。

算法(步骤)

以下是执行所需任务的算法/步骤 -

  • 创建一个名为 multiplyNumbers 的函数,该函数返回传递给它的数字的乘积结果。

  • 在函数内部返回给定数字乘以 3 的结果。

  • 使用 map() 函数将 multiplyNumbers() 函数应用于列表的每个元素,方法是将函数名称和列表作为参数传递给它。

  • 打印将每个元素乘以 3 后的结果列表项。

代码

# creating a function that returns multiplication result def multiplyNumbers(givenNumbers): # returning number after multiplying with 3 return givenNumbers*3 # map() function applies the multiplyNumbers function # for each element of the list givenNumbers = map(multiplyNumbers, [1, 3, 5, 2, 6, 10]) # Printing the resultant list items print("Multiplying list elements with 3:") for element in givenNumbers: print(element)

输出

执行上述程序后,将生成以下输出 -

Multiplying list elements with 3:
3
9
15
6
18
30

filter() 函数

filter() 函数创建一个新的迭代器,该迭代器从先前创建的迭代器(如列表、元组或字典)中过滤元素。

filter() 函数检查序列中是否存在给定条件,然后打印结果。

filter() 函数的时间复杂度 = O(n)

语法

filter(function, iterable)

参数

  • function − 代码中要使用的函数。

  • iterable − 代码中迭代的值。

算法(步骤)

以下是执行所需任务的算法/步骤 -

  • 创建一个名为 votingAge 的函数,该函数返回列表中投票的合格年龄。

  • 使用 if 条件语句检查传递给函数的数字是否大于或等于 18。

  • 如果上述语句为真,则返回该数字。

  • 创建一个变量来存储输入列表。

  • 使用 filter() 函数,将函数名称和输入列表作为参数传递给它,以从列表中过滤出大于或等于 18 的年龄。在这里,它将 votingAge() 函数应用于列表的每个元素,结果仅存储 votingAge() 函数返回的列表值(此处 votingAge() 函数在数字大于 18 时返回该数字)。

  • 打印过滤器对象

  • 使用 list() 函数(返回可迭代对象的列表)将上述过滤器对象转换为列表并打印它。

示例

# creating a function that returns the eligibility ages for voting from the list def votingAge(givenNumumber): # checking whether the number is greater than or equal to 18 if givenNumumber>=18: # returning number return givenNumumber # input list inputList = [3, 20, 18, 6, 14, 25, 19] # Getting only values of above list which are greater than or equal to 18 result_filterObj = filter(votingAge, inputList) # printing the filter object print(result_filterObj) # converting into a list print("Eligibility ages for voting from the input list:", list(result_filterObj))

输出

执行上述程序后,将生成以下输出 -

<filter object at 0x7fcd3ad14280>
Eligibility ages for voting from the input list: [20, 18, 25, 19]

reduce()

在 Python 中,reduce() 函数迭代列表或其他可迭代数据类型中的每个项目,返回单个值。它位于 functools 库中。这比循环更有效。

语法

reduce(function, iterable)

参数

  • function − 代码中要使用的函数。

  • iterable − 代码中迭代的值。

算法(步骤)

以下是执行所需任务的算法/步骤 -

  • 使用 import 关键字从 functools 模块导入 reduce() 函数

  • 创建一个名为 addNumbers() 的函数,该函数返回所有列表项的总和。

  • 创建一个变量来存储输入列表

  • 使用 reduce() 函数,绕过 addNumbers() 函数,并将输入列表作为参数以获取所有列表项的总和。

示例

# importing reduce() function from functools module from functools import reduce # function that returns the sum of all list items def addNumbers(x, y): return x+y # input list inputList = [12, 4, 10, 15, 6, 5] # Print the sum of the list items using reduce() function print("The sum of all list items:") print(reduce(addNumbers, inputList))

输出

The sum of all list items:
52

当我们将 addNumbers() 函数和输入列表作为参数传递给 reduce() 函数时,它将获取列表的两个元素并将它们相加以生成一个元素,然后获取另一个列表元素并再次将其相加以生成一个元素,依此类推,直到它将列表的所有元素相加并返回一个值。

结论

本文介绍了 map()、reduce() 和 filter() 函数,以及它们的语法和示例。

更新于: 2022-09-15

11K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告