• 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)
  • 相关阅读:
    java并发编程 线程间协作
    博客园添加目录,导航,回到顶部
    汉诺塔递归实现
    java并发编程 线程基础
    Flink中算子进行Chain的规则分析(最新代码,源码版本大于1.11.2)
    Flink流处理程序在Local模式下的运行流程源码分析
    Flink-DataStream流处理应用(Local模式下)运行流程-源码分析
    Flink Streaming基于滚动窗口的事件时间分析
    Spark-2.3.2 Java SparkSQL的自定义HBase数据源
    Spark-2.3.2 HBase BulkLoad
  • 原文地址:https://www.cnblogs.com/alantammm/p/13949092.html
Copyright © 2020-2023  润新知