python的reduce函数的使用方法详解以及使用案例,相加,相乘(处理一个序列,然后把序列进程合并操作)
1、求列表的数字相加之和,还是之前的习惯,写for循环来实现
num_1=[1,2,3,4,5,6,7,8,9] a=0 for n in num_1: #a=a+n a+=n print (a) C:\python35\python3.exe D:/pyproject/day14函数/reduce函数.py 45
2、优化一下改成函数形式
num_1=[1,2,3,4,5,6,7,8,9]#定义一个列表 def reduce_atest(array):#定义一个函数,需要传一个参数array a=0 for n in array: a+=n return a#函数的返回值为这些数字相加的结果 print(reduce_atest(num_1))#把这个列表当成是函数的参数传给array C:\python35\python3.exe D:/pyproject/day14函数/reduce函数.py 45
3、专门定义函数用来做相乘运算
num_1=[1,2,3,4,5,6,7,8,9] def xiangcheng(x,y): return x*y def reduce_atest(func,array): a=1 for n in array:#开始循环array这个列表,也就是num里面的数字 a=func(a,n)#func就是xiangcheng这个函数,需要传2个参数,a是初始的1,n是迭代的数字 return a print(reduce_atest(xiangcheng,num_1))#传2个参数 一个是处理方式,一个是可迭代的对象,传给了func和array C:\python35\python3.exe D:/pyproject/day14函数/reduce函数.py 362880
4、在继续优化,把自定义函数换成lambda
num_1=[1,2,3,4,5,6,7,8,9] def reduce_atest(func,array): a=1 for n in array:#开始循环array这个列表,也就是num里面的数字 a=func(a,n)#func就是xiangcheng这个函数,需要传2个参数,a是初始的1,n是迭代的数字 return a print(reduce_atest(lambda x,y:x*y,num_1))#传2个参数 一个是处理方式,一个是可迭代的对象,传给了func和array C:\python35\python3.exe D:/pyproject/day14函数/reduce函数.py 362880
#lambda x,y:x*y,() 等价于下面2行,之前的map filter用了好多次了 # def xiangcheng(x,y): # return x*y
5、由于函数里面的a=1这个是写死了的,这样是太好的,因为是列表里面的数字相乘,我们可以在第一步就把第一个数字拿出来,在循环的时候在相乘
num_1=[1,2,3,4,5,6,7,8,9] def reduce_atest(func,array): a=array.pop(0)#第一步这时候a等于列表里面取出来的第一个数字 for n in array:#开始循环array这个列表,从第二个数字开始了 a=func(a,n)#func就是xiangcheng这个函数,需要传2个参数,a是初始的1,n是迭代的数字 return a print(reduce_atest(lambda x,y:x*y,num_1))#传2个参数 一个是处理方式,一个是可迭代的对象,传给了func和array C:\python35\python3.exe D:/pyproject/day14函数/reduce函数.py 362880
6、在修改下增加一个功能,增加一个用户可以指定什么数字开头作为一个基数,这个基数乘以列表里面的数字,比方说10*[1,2,3,4,5,6,7,8,9] 22*[1,2,3,4,5,6,7,8,9]
思路就是增加一个函数的默认参数,如果用户不传,就没有这个默认参数,如果传了,就以这个数字作为基数,再乘以列表里面的数字
num_1=[1,2,3,4,5,6,7,8,9] def reduce_atest(func,array,init=None): if init == None: a=array.pop(0) else: a=init for n in array: a=func(a,n) return a print(reduce_atest(lambda x,y:x*y,num_1,2)) C:\python35\python3.exe D:/pyproject/day14函数/reduce函数.py 725760
7、reduce函数
map把所有的元素在原有的基础之上处理一下(每个元素自增1 自检1)
filter遍历序列中的每个元素,判断每个元素得到布尔值,如果True则留下来(判断看电影的人是不是sb,说话的就是sb(判断字符串是否以sb开头,sb结尾))
reduce可以把列表中的整体的数据合并到一处,得到一个结果
reduce 处理一个序列,然后把序列进程合并操作
reduce的使用,在使用之前得先导入模块,在python2.7中可以直接使用
from functools import reduce num_1=[1,2,3,4,5,6,7,8,9] print(reduce(lambda x,y:x*y,num_1)) C:\python35\python3.exe D:/pyproject/day14函数/reduce函数.py 362880
reduce也可以加基数
from functools import reduce num_1=[1,2,3,4,5,6,7,8,9] print(reduce(lambda x,y:x*y,num_1,10)) C:\python35\python3.exe D:/pyproject/day14函数/reduce函数.py 3628800
8、把列表里面的所有元素相加
from functools import reduce num=[1,5,6,2,7,8] print((reduce(lambda x,y:x+y,num))) C:\python35\python3.exe D:/pyproject/day14函数/reduce函数.py 29