zoukankan      html  css  js  c++  java
  • 【python深入】map/reduce/lambda 内置函数的使用

    python中的内置函数里面,有map和reduce两个方法,这两个方法可以非常好的去做一些事情,但是之前都没有用过,下面是关于这两个方法的介绍:

    一、map相关

    map()会根据提供的函数对指定的序列做映射

    具体用法及含义如下:

     

    因为这是python27中,所以会直接返回一个list,如果是python3,则返回迭代器

    具体参数:

    (1)function参数:函数,可以包含1个或者多个参数,看sequence的个数(备注:操作的内容其实就是sequence里面的每一个元素)

    (2)sequence参数:要操作的序列

    下面是map的具体用法:

    def char2num(s):

        return {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9}[s]

    print map(char2num, '12345')

    运行结果是:

    [1, 2, 3, 4, 5]

    接下来是有两个或者更多参数的情况:

    def addmap(x,y,z):

        return x+y*z

    print map(addmap, [1,2,3], [4,5,6], [1,2,3])

    运行结果是:

    [5, 12, 21]

    二、reduce相关

    reduce()的作用是:根据提供的函数,对参数序列中的元素进行累积,比如说提供的函数是加和,则会对参数序列中的所有元素进行加和处理

    具体用法及含义如下:

     

    具体参数:

    (1)function参数:包含两个参数,是用来进行累加运算的两个参数

    (2)sequence参数:要进行操作的序列

    下面是reduce的具体用法:

    def fn(x,y):

        return x*10 + y

    print reduce(fn, [1,2,5,7,9])

    print fn(fn(fn(fn(1,2),5),7),9)

    运行结果是:

    12579

    12579

    从上面的例子中可以看到:

     reduce(fn, [1,2,5,7,9]) 其实等价于  fn(fn(fn(fn(1,2),5),7),9)

    然后将map和reduce结合起来用的话,可以实现一个str2int的功能:

    def str2int(s):

        def fn(x,y):

            return x*10 + y

        def char2num(s):

            return {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9}[s]

        return reduce(fn, map(char2num, s))

    print str2int('12386')

    运行结果是:

    12386

    后面再有这种map或者reduce的需要,可以自己实现function,然后结合使用即可

     三、lambda

    lambda就是匿名函数,不需要函数名,就只有一个表达式,不用写return

     

    比如说对两个元素实现相加的操作,这个可以跟reduce结合使用:

    #关于lambda的用法

    print reduce(lambda x,y:x+y, ['q', 'e', 'w', 't', 'a'])

     

    或者跟map结合使用:

    print map(lambda x, y:x*x+y*y, [1,2,3,4,5], [1,2,3,4,5])

     

    然后运行结果分别如下:

    qewta

    [2, 8, 18, 32, 50]

  • 相关阅读:
    Android 生命周期
    struts标签,<s:textfield>嵌套<s:property>的问题
    设置input 内容居中显示 .
    Jquery实现遮罩层,就是弹出DIV周围都灰色不能操作
    如何用Jquery实现 ,比如点击图片之后 ,该图片变成向下的箭头,再点击向下箭头的图片 又变成原始图片呢
    html制作,点击文字超链接显示文本框,再点击文字超链接隐藏文本框
    hibernate mysql视图操作
    Java 日期时间 Date类型,long类型,String类型表现形式的转换
    Spring启动异常: cvc-elt.1: Cannot find the declaration of element 'beans'(转)
    解决不联网无法启动struts2问题
  • 原文地址:https://www.cnblogs.com/keke-xiaoxiami/p/8718057.html
Copyright © 2011-2022 走看看