zoukankan      html  css  js  c++  java
  • map/reduce+lambda让程序简单化

    map()函数

    map()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

    也就是  map(f,[x,x,x,x])  那么f是一个函数,[x,x,x,x]是一个序列,那么map完成的操作是将序列里面的每一个元素x传入到函数f中去执行,将每个元素执行的结果返回为新的序列  Iterator(惰性序列)

    由于Iterator是惰性序列,因此如果要将结果以序列方式显示出来,那么一般在前面加 list 以列表的形式显示出来。

    举例说明,比如我们有一个函数f(x)=x^2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现如下:

    def f(x):
        return x*x
    r=map(f,[1,2,3,4,5,6,7,8,9])
    list(r)
    运行结果:[1, 4, 9, 16, 25, 36, 49, 64, 81]

    reduce函数

    reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。

    效果为:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

    例如:把序列[1, 3, 5, 7, 9]变换成整数13579

    from functools import reduce
    def fn(x, y):
         return x * 10 + y
    
    reduce(fn, [1, 3, 5, 7, 9])
    
    运行结果:13579

    lambda函数

    lambda可一行实现定义一个函数

    lambda 自变量:完成的功能表达式

    例如 lambda x,y:x+y  及定义了一个两参数求和的函数

    map/reduce+lambda的简化

    最开始的利用map函数对一个列表的元素求平方的代码就可以改成:

    list(map(lambda x:x*x,[1,2,3,4,5,6,7,8,9]))

    结果相同,简化了代码

    后面利用reduce将序列[1,3,5,7,9]变成整数13579的代码可以简化为:

    from functools import reduce
    reduce(lambda x,y:x*10+y,[1,3,5,7,9])

    自身觉得map+lambda的结构配合要经常使用,以后会派上用场的。

  • 相关阅读:
    Ubuntu 12.04下GAMIT10.40安装说明
    GAMIT 10.50在Ubuntu 12.04系统下的安装
    tomcat 5.5 动态加载类
    GAMIT 10.50在Ubuntu 12.04系统下的安装
    RHCE 系列(九):如何使用无客户端配置 Postfix
    Nginx+Keepalived(带Nginx监控脚本)
    黑马程序员_java08_多线程
    oracle 表类型变量的使用
    如何在win7系统中安装redis
    bzoj 2816: [ZJOI2012]网络(splay)
  • 原文地址:https://www.cnblogs.com/-chenxs/p/11202849.html
Copyright © 2011-2022 走看看