写点什么

使用 Python 映射,过滤和缩减函数:所有您需要知道的

发布于: 2021 年 04 月 16 日

摘要:在本文中,您将学习 Python 中的三个令人印象深刻的函数,即 map(),filter 和 reduce()。


本文分享自华为云社区《从零开始学python | 使用Python映射,过滤和缩减函数:所有您需要知道的》,原文作者:Yuchuan。


Python 提供了许多预定义的内置函数,最终用户可以通过调用它们来使用它们。这些功能不仅简化了程序员的工作,而且创建了标准的编码环境。在本文中,您将学习 Python 中的三个令人印象深刻的函数,即 map(),filter 和 reduce()。


在继续之前,让我们看一下内容:


  • 什么是 Python 中的 map,filter 和 reduce 函数?

  • 在以下范围内使用用户定义的函数和 lambda 函数:

map()函数

filter()函数

reduce()函数

  • 一起使用 map(),filter()和 reduce()函数

map()中的 filter()

filter()中的 map()

map()和 filter()中带有 reduce()


因此,让我们开始吧。:)

什么是 Python 中的 map(),filter()和 reduce()函数?


如前所述,map(),filter()和 reduce()是 Python 的内置函数。这些功能启用了 Python 的功能编程方面。在函数式编程中,传递的参数是决定输出的唯一因素。这些功能可以将任何其他功能用作参数,也可以提供给其他功能作为参数。现在让我们更深入地研究这些功能。


map()函数:

map()函数是一种高阶函数。如前所述,此函数将另一个函数与一个可迭代序列一起作为参数,并在将该函数应用于序列中存在的每个可迭代序列之后返回输出。其语法如下:


句法:

地图(函数,可迭代)


在此,函数定义了一个表达式,该表达式又应用于可迭代对象。map 函数可以将用户定义的函数以及 lambda 函数作为参数。

在以下范围内使用用户定义的函数和 Lambda 函数:

map()中的用户定义函数:


map()函数可以将用户定义的函数作为参数。这些功能的参数由用户或程序员专门设置。例如:


例子:


def newfunc(a):    return a*ax = map(newfunc, (1,2,3,4))  #x is the map objectprint(x)print(set(x))
复制代码


输出:


<位于0x00000284B9AEADD8的地图对象>{16, 1, 4, 9}
复制代码


如您所见,x 是一个地图对象。下一部分输出显示以 newfunc()作为参数的 map 函数,然后将 a * a 应用于所有可迭代对象。结果,所有可迭代变量的值将自身相乘并返回。


注意:输出不是按可迭代的值的顺序,因为我使用过 set()函数。您还可以使用 list()或 tuple()函数,例如:


例子:


def newfunc(a):    return a*ax = map(newfunc, (1,2,3,4))  #x is the map objectprint(x)print(list(x))
复制代码


输出:


<位于0x00000284B9AEA940的地图对象>[1, 4, 9, 16]
复制代码


您还可以传递多个参数列表。例如:


例子:


def func(a, b):    return a + b a = map(func, [2, 4, 5], [1,2,3])print(a)print(tuple(a))
复制代码


输出:


<位于0x00000284B9BA1E80的地图对象>(3, 6, 8)
复制代码


现在让我们看看如何在 map()函数中使用 lambda 函数。

map()中的 Lambda 函数:


Lambda 函数是具有任何名称的函数。这些功能通常作为参数提供给其他功能。现在让我们尝试将 lambda 函数嵌入 map()函数中。考虑以下示例:


例子:


tup= (5, 7, 22, 97, 54, 62, 77, 23, 73, 61)newtuple = tuple(map(lambda x: x+3 , tup)) print(newtuple)
复制代码


输出:


(8, 10, 25, 100, 57, 65, 80, 26, 76, 64)
复制代码


上面的输出是将 lambda 表达式(x + 3)应用于元组中存在的每个项目的结果。

filter()函数:


filter()函数用于创建由值组成的输出列表,该值针对该值返回 true。它的语法如下:


句法:

过滤器(函数,可迭代)

就像 map()一样,可以使用此函数,也可以将用户定义的函数以及 lambda 函数用作参数。


例子:


def func(x):    if x>=3:        return xy = filter(func, (1,2,3,4))  print(y)print(list(y))
复制代码


输出:


<位于0x00000284B9BBCC50的过滤器对象>[3, 4]
复制代码


如您所见,y 是过滤器对象,并且列表是条件(x> = 3)正确的值的列表。

在 filter()中使用 lambda:


用作参数的 lambda 函数实际上定义了要检查的条件。例如:


例子:


y = filter(lambda x: (x>=3), (1,2,3,4))print(list(y))
复制代码


输出:


[3,4]
复制代码


上面的代码产生的输出与以前的函数相同。

reduce()函数:


顾名思义,reduce()函数将给定函数应用于可迭代对象并返回单个值。



该函数的语法如下:


句法:

减少(函数,可迭代)

此处的函数定义了需要将哪些表达式应用于可迭代对象。此功能需要从 functools 模块导入。例如:


例子:


from functools import reducereduce(lambda a,b: a+b,[23,21,45,98])
复制代码


输出: 187

在上面的示例中,reduce 函数连续添加列表中存在的每个可迭代对象,并返回单个输出。

Python 中的 map(),filter()和 reduce()函数可以一起使用。

一起使用 map(),filter()和 reduce()函数:


执行此操作时,首先会解析内部函数,然后外部函数将对内部函数的输出进行操作。

让我们首先尝试将 filter()函数作为参数传递给 map()函数。

在 map()中使用 filter():


下面给出的代码首先检查条件(x> = 3)对于可迭代对象是否为真。然后,使用 map()函数映射输出。


例子:


c = map(lambda x:x+x,filter(lambda x: (x>=3), (1,2,3,4)))print(list(c))
复制代码


输出: [6,8]

如果从给定的元组中滤除大于或等于 3 的整数,则结果为[3,4]。然后,如果使用(x + x)条件映射此条件,则将获得[6,8],即输出。

在 filter()中使用 map():


当您在 filter()函数中使用 map()函数时,可迭代对象首先由 map 函数进行操作,然后将 filter()的条件应用于它们。


例子:


c = filter(lambda x: (x>=3),map(lambda x:x+x, (1,2,3,4)))  #lambda x: (x>=3)print(list(c))
复制代码


输出: [ 4、6、8 ]

在 reduce()中使用 map()和 filter():


内部函数的输出根据提供给 reduce()函数的条件而减少。


例子:


d = reduce(lambda x,y: x+y,map(lambda x:x+x,filter(lambda x: (x>=3), (1,2,3,4)))) print(d)
复制代码


输出: 14

输出是[6,8]的结果,它是内部 map()和 filter()函数的结果。


到此为止,我们已经结束了有关 map(),filter()和 Python 中的 reduce 函数的文章的结尾。希望您已经清楚地了解了所有内容。确保尽可能多地练习并恢复经验。


点击关注,第一时间了解华为云新鲜技术~

发布于: 2021 年 04 月 16 日阅读数: 16
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
使用Python映射,过滤和缩减函数:所有您需要知道的