python中的高阶函数map(),reduce(),filter()的区别

时间:2023-01-06 18:31:14

#reduce()的用法:把一个函数作用在一个序列上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算#wh注意:累积计算而不是加法运算,而是序列中后面的元素与前面的元素做累积计算(结果是所有元素共同作用的结果)def func(x,y):    return x*yprint 'reduce1:',reduce(func,range(1,10))print 'reduce2:',reduce(func,[1,2,3])# print sum(range(1,101))#python内置sum()函数求和#map()接收两个参数,一个是函数,一个是序列,map将传人的函数依次作用到序列的每个元素,并把结果作为新的list返回。(结果是各有各的结果)#map()中的函数传人两个参数def f(x,y,z,k):    return x*y+z+kprint '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])
#map()中的函数传人一个参数def f(x):    return x*xprint 'map11:',map(f,range(1,10))print 'map22:',map(f,[1,2,3,4])#filter()是‘筛选函数’,也接收一个函数和一个序列,filter()把传人的函数依次作用于序列的每个元素,然后根据返回值是True还是false决定保留还是丢弃该元素def fr(x):    return x%2==1print '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()是将传人的函数作用在序列的第一个元素得到结果后,把这个结果继续与下一个元素作用(累积计算),最终结果是所有的元素相互作用的结果。
新手学习python,看网上资料有点晕,所以自己总结了一下这三个函数作为笔记。