zoukankan      html  css  js  c++  java
  • 高阶函数reduce

    # ### reduce
    '''
    reduce(func,iterable)
    功能:计算	
    	先把iterable中的前两个数据拿出来,扔到func当中,
    	进行计算,把计算的结果在和iterable当中的第三个数据扔到func中
    	进行计算, 依次类推... ... 
    	直到iterable中的数据全都拿出来为止.
    参数:
    	func: 内置函数 或者 自定义函数
    	iterable:可迭代性数据(常用:容器类型数据,range对象,迭代器)
    返回值:
    	计算最终的结果
    '''
    
    # [5,4,8,8] => 5488
    # 方法一
    lst = [5,4,8,8]
    strvar = ''
    for i in lst:
    	strvar += str(i)
    print(strvar,type(strvar))
    res = int(strvar)
    print(res,type(res))
    
    # 方法二
    '''
    5*10 + 4 = 54
    54*10 + 8 = 548
    548*10 + 8 = 5488
    '''
    lst = [5,4,8,8,1,2,3,4]
    it = iter(lst)
    num1 = next(it) # 5
    num2 = next(it) # 4
    total = num1 * 10 + num2
    print(total)
    for i in it:
    	total = total * 10 + i
    print(total,type(total))
    
    #  使用reduce实现
    # from ..import 从哪个模块 ... 导入 ...
    # functools是一个模块(文件)
    from functools import reduce
    lst = [5,4,8,8]
    def func(x,y):
    	return x*10+y
    
    res = reduce(func,lst)
    print(res)
    '''
    首先把5,4拿到func函数当中,进行运算得到54
    然后把54和lst当中的第三个元素8拿到func当中进行运算得到548
    然后把548和list当中的第四个元素8拿到func当中进行运算得到5488
    到此,所有数据运算完毕,返回5488
    '''
    
    # "987" => 987 (不让使用int类型强转)
    def func(x,y):
    	return x*10+y
    # ["9","8","7"]
    res = reduce(func,"987")
    print(res)
    # '9999999999899999999998999999999989999999999899999999998999999999987' 
    # "987" => [9,8,7]
    def func2(n):
    	dic = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}
    	return dic[n]
    
    it = map(func2,"987")
    # print(list(it))
    res = reduce(func,it)
    print(res,type(res))
    

      

  • 相关阅读:
    python BUGGGGGGGGGG
    Golang channel底层原理及 select 和range 操作channel用法
    Go reflect包用法和理解
    Golang 之sync包应用
    Golang 之 sync.Pool揭秘
    深入理解字节码文件
    java中的回调,监听器,观察者
    范式
    BIO,NIO,AIO总结(二)
    anaconda命令行运行过程中出现的错误
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/10906524.html
Copyright © 2011-2022 走看看