zoukankan      html  css  js  c++  java
  • reduce

    reduce(function,sequence[,initital])

    parameter:

    • function(带两个参数的函数,必需项)

    • sequence(元祖、字典、列表、字符串等可迭代对象,必需项)

    • inital(初始值,可选项)

    概念:将可迭代的对象的前两个值a,b 传递到函数中,然后经过函数的处理返回的值c,再和可迭代的对象中的第三个值d 作为函数的两个参数( f(c,d) )传入函数中,以此类推
    如果传入了 initial 值, 那么首先传的就不是 sequence 的第一个和第二个元素,而是 initial值和 第一个元素


    举例1:将一个列表中所有元素组合成一个字符串

    from functools import reduce
    
    str1 = ['a', 'b', 'c', 'd', 'e',2,1,3]
    str1 =[str(x) for x in str1]
    print(str1)
    def fun1(x,y):
        return x+y
    #不传入initial初始值
    res = reduce(fun1,str1)
    print(res) #abcde213
    
    #传入initial初始值
    res = reduce(fun1,str1,'start')
    print(res) #startabcde213

    举例2:将一个整数列表拼接成整数

    res=reduce(lamba x,y:x*10+y ,[1,2,3,4,5]) 
    print(res)#12345

    举例3:对一个比较复杂的sequence进行reduce

    #有一个元祖,元组内的每一个元素是字典,然后将字典中的这些age字段进行累加
    dic = ({'name':'Alan Turing', 'age':18, 'gender':'male'},
           {'name':'Dennis Ritchie', 'age':12, 'gender':'male'},
           {'name':'Ada Lovelace', 'age':25, 'gender':'female'},
           {'name':'Frances E. Allen', 'age':30, 'gender':'female'}
    )
    #这么写会报错,因为元祖中第一个字典 和第二个字典传入x,y之后得到的是30,是一个整型,然后30作为参数x和元祖中的第三个元素执行函数逻辑
    #整型没有['age'],所以报错
    def fun(x,y):
        sum = x['age']+y['age']
        return sum
    res = reduce(fun,dic)
    
    ##正确写法,写个初始值,然后每次函数运算出来的sum直接作为一个变量传递进去
    ##当然这个例子只是一个举例 说明reduce的逻辑,如果要直接获取例中的age的和 直接可以用
    #sum([x['age'] for x in dic])
    def fun(x,y):
        sum = x + y['age']
        return sum
    res = reduce(fun,dic,0)
    print(res)
  • 相关阅读:
    C#根据长度创建数组
    PLC读取数据高低位交换,批量保存到list集合,方便调用。
    C#读取图片流保存到文件,再读取流文件,把图片再显示出来
    C#从SQL server数据库中读取l图片和存入图片[转]
    C# 数据库查询表字段,写入到combox
    C# MSSQL数据库查询SQL语句拼接
    C# winform只允许程序运行一个
    C# 定时关机代码
    C#用委托来动态显示日期和时间
    使用margin负值实现压住相邻边距
  • 原文地址:https://www.cnblogs.com/alantammm/p/13949092.html
Copyright © 2011-2022 走看看