Python内置函数之filter map reduce介绍
Python内置了一些非常有趣、有用的函数,如:filter、map、reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并.是Python列表方法的三架马车。
1.filter函数的功能相当于过滤器。调用一个布尔函数bool_func来迭代遍历每个seq中的元素;返回一个使bool_seq返回值为true的元素的序列。
>>>N=range(10) >>>printfilter(lambdax:x>5,N) [6,7,8,9]
2.map函数func作用于给定序列的每个元素,并用一个列表来提供返回值。
>>>N1=[1,2,3] >>>N2=[6,5,4] >>>map(lambdax,y:x+y,N1,N2) [7,7,7] >>>map(lambdax:x+3,N1) [4,5,6]
3.reduce函数,func为二元函数,将func作用于seq序列的元素,每次携带一对(先前的结果以及下一个序列的元素),连续的将现有的结果和下一个值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值。
>>>N=range(1,101) >>>reduce(lambdax,y:x+y,N) 5050
例1:用map和reduce实现5的阶乘相加(5!+4!+3!+2!+1!)
>>>printreduce(lambdax,y:x*y,range(1,6)) >>>printreduce(lambdax,y:x*y,range(1,5)) >>>printreduce(lambdax,y:x*y,range(1,4)) >>>printreduce(lambdax,y:x*y,range(1,3)) >>>printreduce(lambdax,y:x*y,range(1,2)) '''
结果为
120 24 6 2 1 '''
#把上一步的结果变成一个阶乘列表
>>>printmap(lambdaa:reduce(lambdax,y:x*y,range(1,a+1)),range(1,6)) [1,2,6,24,120]
#最后把阶乘列表相加,第一题解决
>>>printreduce(lambdam,n:m+n,map(lambdaa:reduce(lambdax,y:x*y,range(1,a+1)),range(1,6))) 153
例2:用filter将100~200以内的质数过滤出来
质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数
>>>filter(lambdaN:len(filter(lambdaM:N%M==0,range(2,int(N**0.5)+1)))==0,range(100,201))