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
posted @ 2018-06-08 00:46  gouguoqi  阅读(2159)  评论(0编辑  收藏  举报