Python:map()、reduce()、filter()的区别

文章转于:https://blog.csdn.net/goupper1991/article/details/49803355

原文博主:https://blog.csdn.net/goupper1991(小二百)

 

一)reduce()的用法:把一个函数作用在一个序列上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算  

#注意:累积计算而不是加法运算,而是序列中后面的元素与前面的元素做累积计算(结果是所有元素共同作用的结果)  

def func(x,y):  

return x*y  

print 'reduce1:',reduce(func,range(1,10))  

print 'reduce2:',reduce(func,[1,2,3])  

# print sum(range(1,101))#python内置sum()函数求和  

二)map()接收两个参数,一个是函数,一个是序列,map将传人的函数依次作用到序列的每个元素,并把结果作为新的list返回。(结果是各有各的结果)  

   1)map()中的函数传人两个参数  

def f(x,y,z,k):  

return x*y+z+k  

print 'map1:',map(f,range(1,10),range(2,11),range(1,10),[1,2,3,4,5,6,7,8,9])  

print 'map2:',map(f,[1,2,3,4],[1,72,35,4],[1,2,3,4],[1,72,35,4])  

   2)map()中的函数传人一个参数  

def f(x):  

return x*x  

print 'map11:',map(f,range(1,10))  

print 'map22:',map(f,[1,2,3,4])  

三)filter()是‘筛选函数’,也接收一个函数和一个序列,filter()把传人的函数依次作用于序列的每个元素,然后根据返回值是True还是false决定保留还是丢弃该元素  

def fr(x):  

return x%2==1  

print 'filter1:',filter(fr,range(1,51))#筛选出100以内的所有奇数  

print 'filter2:',filter(fr,[1,2,3,4])  

上面代码运行结果:

reduce1: 362880
reduce2: 6
map1: [4, 10, 18, 28, 40, 54, 70, 88, 108]
map2: [3, 218, 143, 24]
map11: [1, 4, 9, 16, 25, 36, 49, 64, 81]
map22: [1, 4, 9, 16]
filter1: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49]
filter2: [1, 3]

map()和reduce()的区别:

1)map()中的函数(是指map()两个参数中的函数中的参数,而不是map()的参数)可以传人一个或者多个参数,reduce()中的函数必须接收两个参数

2)map()是将传人的函数依次作用到序列的每个元素,每个元素都是独自被函数“作用”一次,reduce()是将传人的函数作用在序列的第一个元素得到结果后,把这个结果继续与下一个元素作用(累积计算),最终结果是所有的元素相互作用的结果。

原文地址:https://www.cnblogs.com/volcao/p/8694315.html