zoukankan      html  css  js  c++  java
  • 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:python35python3.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:python35python3.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:python35python3.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:python35python3.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:python35python3.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:python35python3.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:python35python3.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:python35python3.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:python35python3.exe D:/pyproject/day14函数/reduce函数.py
    
    29
  • 相关阅读:
    redis缓存分页数据ID
    Kafka学习之(六)搭建kafka集群
    高并发下,php使用uniqid函数生成唯一标识符的四种方案(本博客也有雪花算法的方式,在【算法组】)
    Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建
    Centos 更改系统时间
    Js删除字符串中的指定字符串
    Jquery 给Js动态新添加的元素 绑定的点击事件
    PHP 常用的header头部定义汇总
    来了解一下Ajax是什么?Ajax的原理?Ajax与传统Web比较?Ajax的优缺点?Ajax的Post与Get比较
    phpstorm常用快捷键(自备不全)
  • 原文地址:https://www.cnblogs.com/gouguoqilinux/p/9153541.html
Copyright © 2011-2022 走看看