摘要:在本文中,您将学习Python中的三个使人印象深入的函数,即map(),filter和reduce()。
本文分享自华为云社区《从零开始学python | 使用Python映射,过滤和缩减函数:全部您须要知道的》,原文做者:Yuchuan。python
Python提供了许多预约义的内置函数,最终用户能够经过调用它们来使用它们。这些功能不只简化了程序员的工做,并且建立了标准的编码环境。在本文中,您将学习Python中的三个使人印象深入的函数,即map(),filter和reduce()。程序员
在继续以前,让咱们看一下内容:编程
所以,让咱们开始吧。:)segmentfault
如前所述,map(),filter()和reduce()是Python的内置函数。这些功能启用了Python的功能编程方面。在函数式编程中,传递的参数是决定输出的惟一因素。这些功能能够将任何其余功能用做参数,也能够提供给其余功能做为参数。如今让咱们更深刻地研究这些功能。函数式编程
map()函数:函数
map()函数是一种高阶函数。如前所述,此函数将另外一个函数与一个可迭代序列一块儿做为参数,并在将该函数应用于序列中存在的每一个可迭代序列以后返回输出。其语法以下:学习
句法:编码
地图(函数,可迭代)spa
在此,函数定义了一个表达式,该表达式又应用于可迭代对象。map函数能够将用户定义的函数以及lambda函数做为参数。code
map()函数能够将用户定义的函数做为参数。这些功能的参数由用户或程序员专门设置。例如:
例子:
def newfunc(a): return a*a x = map(newfunc, (1,2,3,4)) #x is the map object print(x) print(set(x))
输出:
<位于0x00000284B9AEADD8的地图对象> {16, 1, 4, 9}
如您所见,x是一个地图对象。下一部分输出显示以newfunc()做为参数的map函数,而后将a * a应用于全部可迭代对象。结果,全部可迭代变量的值将自身相乘并返回。
注意:输出不是按可迭代的值的顺序,由于我使用过set()函数。您还可使用list()或tuple()函数,例如:
例子:
def newfunc(a): return a*a x = map(newfunc, (1,2,3,4)) #x is the map object print(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函数。
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()函数用于建立由值组成的输出列表,该值针对该值返回true。它的语法以下:
句法:
过滤器(函数,可迭代)
就像map()同样,可使用此函数,也能够将用户定义的函数以及lambda函数用做参数。
例子:
def func(x): if x>=3: return x y = filter(func, (1,2,3,4)) print(y) print(list(y))
输出:
<位于0x00000284B9BBCC50的过滤器对象> [3, 4]
如您所见,y是过滤器对象,而且列表是条件(x> = 3)正确的值的列表。
用做参数的lambda函数实际上定义了要检查的条件。例如:
例子:
y = filter(lambda x: (x>=3), (1,2,3,4)) print(list(y))
输出:
[3,4]
上面的代码产生的输出与之前的函数相同。
顾名思义,reduce()函数将给定函数应用于可迭代对象并返回单个值。
该函数的语法以下:
句法:
减小(函数,可迭代)
此处的函数定义了须要将哪些表达式应用于可迭代对象。此功能须要从functools模块导入。例如:
例子:
from functools import reduce reduce(lambda a,b: a+b,[23,21,45,98])
输出: 187
在上面的示例中,reduce函数连续添加列表中存在的每一个可迭代对象,并返回单个输出。
一块儿使用map(),filter()和reduce()函数:
执行此操做时,首先会解析内部函数,而后外部函数将对内部函数的输出进行操做。
让咱们首先尝试将filter()函数做为参数传递给map()函数。
下面给出的代码首先检查条件(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()函数时,可迭代对象首先由map函数进行操做,而后将filter()的条件应用于它们。
例子:
c = filter(lambda x: (x>=3),map(lambda x:x+x, (1,2,3,4))) #lambda x: (x>=3) print(list(c))
输出: [ 四、六、8 ]
内部函数的输出根据提供给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函数的文章的结尾。但愿您已经清楚地了解了全部内容。确保尽量多地练习并恢复经验。