• python中的map,reduce,filter函数和lambda表达式


    python中的map,reduce,filter函数和lambda表达式

    首先看几个栗子:

    map(lambda a : a > 3, a)
    Out[22]: [False, False, False, True, True]
    
    filter(lambda a : a > 3, a)
    Out[23]: [4, 5]
    
    reduce(lambda a : a > 3, a)
    Traceback (most recent call last):
    
      File "<ipython-input-24-2c40571c49c9>", line 1, in <module>
        reduce(lambda a : a > 3, a)
    
    TypeError: <lambda>() takes exactly 1 argument (2 given)
    
    
    reduce(lambda a,b : a + b , a)
    Out[25]: 15

    好,由这几个例子开始介绍。

    首先介绍lambda表达式,因为前面的例子中都有一个lambda表达式。lambda表达式的作用是将函数用一种简单的方式进行定义,比如:

    lambda x : x*x
    lambda x, y : x + y
    lambda x, y : x > y

    等等,冒号前面的是传入的参数,后面是执行的操作,返回的就是操作的结果。由于形式简单,所以也只能表达有限的函数类型。但是这种表示方法可以是函数显得非常简洁。比如:

    lambda x : x * x
    # 等价于
    def func(x):
        return x * x

    尤其是在某个函数可能仅仅使用一次的情况下,这样做更好。lambda表达式常常与下面的map,reduce,filter等一起操作,作为他们的参变量传入,起到用简洁的语句完成对某个list数据的处理工作。

    下面介绍map,reduce,以及filter。

    首先介绍map函数,map 是python中的一个内置的函数,它表示“将某个函数作用于某个list的每个元素身上”。由此也可以知道,我们的map函数需要两个参数:一个是定义好的函数,一个是list。要做到这一点,可以想到,map第一个参数,也就是函数,应该是以后面list的元素的类型作为输入参变量类型的。比如,上面的第一个栗子中,我们定义的是一个判断语句的函数,返回值就是 (a>3) ,这是一个布尔值,所以得到的结果是对每个元素做一个是否大于3的判断,结果为[False, False, False, True, True]。

    而filter则是按照某个规则,将符合规则的留下,其余删除。比如第二个栗子。

    reduce是对list的数据进行一个连续的操作,它的函数应当是双目运算符,比如第三个栗子中,只给了一个参数,那么就会导致TypeError: () takes exactly 1 argument (2 given)的报错,也就是我们的 lambda表达式只接受一个arg,但是给了两个。这两个就是reduce操作给的,也就是说,每次reduce都要顺次地在list中选两个进行操作,之后放回去,在进行操作,一个简明的解释就是:

    reduce(f(a,b), nums) = f(...f(f(nums[0],nums[1]),nums[2]),...,nums[-1])

    所以可以用它来实现连乘和连加求和等操作。

    另外,注意到,map函数的那个函数参数可以是现成的函数,比如str,就是把每个元素变成string类型:

    a
    Out[28]: [1, 2, 3, 4, 5]
    
    map(str, a)
    Out[29]: ['1', '2', '3', '4', '5']

    2018年03月29日23:34:38

  • 相关阅读:
    Android Layout XML属性
    linux]ubuntu挂载U盘
    Android之NDK开发
    Android 创建永不Kill的Service
    如何编写可移植的c/c++代码
    Android写日志文件类
    Android Activity去除标题栏和状态栏
    linux .bash_profile和.bashrc的什么区别
    ListView.setOnItemClickListener、setOnCreateContextMenuListener无效 为什么
    WCF 第四章 绑定 使用队列技术进行通信
  • 原文地址:https://www.cnblogs.com/morikokyuro/p/13256759.html
Copyright © 2020-2023  润新知