zoukankan      html  css  js  c++  java
  • lambda表达式和map(),reduce(),filter()的使用

    lambda 表达式

    lambda 表达式的语法格式如下:

       lambda [parameter_list] : 表达式

    从上面的语法格式可以看出 lambda 表达式的几个要点:

    • lambda 表达式必须使用 lambda 关键字定义。
    • 在 lambda 关键字之后、冒号左边的是参数列表,可以没有参数,也可以有多个参数。如果有多个参数,则需要用逗号隔开,冒号右边是该 lambda 表达式的返回值。

    实际上,lambda 表达式的本质就是匿名的、单行函数体的函数。因此,lambda 表达式可以写成函数的形式。

    例如,对于如下 lambda 表达式:

          lambda x , y:x + y

    可改写为如下函数形式:

    def add(x, y):
        return x+ y

    上面定义函数时使用了简化语法:当函数体只有一行代码时,可以直接把函数体的代码放在与函数头同一行。

    总体来说,函数比 lambda 表达式的适应性更强,lambda 表达式只能创建简单的函数对象(它只适合函数体为单行的情形)。但 lambda 表达式依然有如下两个用途:

    1.对于单行函数,使用 lambda 表达式可以省去定义函数的过程,让代码更加简洁。

    2.对于不需要多次复用的函数,使用 lambda 表达式可以在用完之后立即释放,提高了性能。

    map()函数

    map() 函数的基本语法格式如下:

              map(function, iterable)

    其中,function 参数表示要传入一个函数,其可以是内置函数、自定义函数或者 lambda 匿名函数;iterable 表示一个或多个可迭代对象,可以是列表、字符串等

    map() 函数的功能是对可迭代对象中的每个元素,都调用指定的函数,并返回一个 map 对象

    注意,该函数返回的是一个 map 对象,不能直接输出,可以通过 for 循环或者 list() 函数来显示。

    【例 1】还是对列表中的每个元素乘以 2。

    listDemo = [1, 2, 3, 4, 5]
    new_list = map(lambda x: x * 2, listDemo)
    print(list(new_list))

    结果为:     [2, 4, 6, 8, 10]


    【例 2】map() 函数可传入多个可迭代对象作为参数。

    listDemo1 = [1, 2, 3, 4, 5]
    listDemo2 = [3, 4, 5, 6, 7]
    new_list = map(lambda x,y: x + y, listDemo1,listDemo2)
    print(list(new_list))

    结果为:     [4, 6, 8, 10, 12]

    注意,由于 map() 函数是直接由用 C 语言写的,运行时不需要通过 Python 解释器间接调用,并且内部做了诸多优化,所以相比其他方法,此方法的运行效率最高。

    filter()函数

    filter()函数的基本语法格式如下:

           filter(function, iterable)

    此格式中,funcition 参数表示要传入一个函数,iterable 表示一个可迭代对象。

    filter() 函数的功能是对 iterable 中的每个元素,都使用 function 函数判断,并返回 True 或者 False,最后将返回 True 的元素组成一个新的可遍历的集合

    【例 3】返回一个列表中的所有偶数。

    listDemo = [1, 2, 3, 4, 5]
    new_list = filter(lambda x: x % 2 == 0, listDemo)
    print(list(new_list))

       结果为:  [2, 4]


    【例 4】filter() 函数可以接受多个可迭代对象。

    listDemo = [1, 2, 3, 4, 5]
    new_list = map(lambda x,y: x-y>0,[3,5,6],[1,5,8] )
    print(list(new_list))

    结果为:  [True, False, False]

    reduce()函数

    reduce() 函数通常用来对一个集合做一些累积操作,其基本语法格式为:

          reduce(function, iterable)

    其中,function 规定必须是一个包含 2 个参数的函数;iterable 表示可迭代对象。

    注意,由于 reduce() 函数在 Python 3.x 中已经被移除,放入了 functools 模块,因此在使用该函数之前,需先导入 functools 模块。

    【例 5】计算某个列表元素的乘积。

    import functools
    listDemo = [1, 2, 3, 4, 5]
    product = functools.reduce(lambda x, y: x * y, listDemo)
    print(product)

    结果为:  120

    总结

    通常来说,当对集合中的元素进行一些操作时,如果操作非常简单,比如相加、累积这种,那么应该优先考虑使用 map()、filter()、reduce() 实现。另外,在数据量非常多的情况下(比如机器学习的应用),一般更倾向于函数式编程的表示,因为效率更高。

  • 相关阅读:
    你若不努力,整个世界将与你无关
    【规范】yii2 resetful 授权验证
    DFT到FFT的理解
    【统计学】6.统计量及其抽样分布
    【统计学】5.概率与概率分布
    【统计学】4.数据的概括性度量
    【统计学】3.数据的图表展示
    【统计学】2.数据的搜集
    【统计学】1.导论
    小程序API(1.19)利用API函数设置标签栏的方法
  • 原文地址:https://www.cnblogs.com/jzxs/p/11426694.html
Copyright © 2011-2022 走看看