python学习笔记——lambda关键字、map、filter、reduce

系统 1381 0

在python中有一些有意思的内置函数,例如map()、filter()、reduce()函数,总结一下加深理解。

  1. lambda关键字

  2. map函数

  3. filter函数

  4. sorted函数

  5. zip函数

以上四种函数均返回的是对象,需在外面加list并print才能显示

一、lambda表达式:匿名函数


原文地址:https://www.cnblogs.com/hf8051/p/8085424.html

  1. lambda表达式,通常是在需要一个函数,但是又 不想费神去命名一个函数的场合下使用 ,也就是指匿名函数。

  2. lambda所表示的 匿名函数的内容应该是很简单的,如果复杂的话,干脆就重新定义一个函数 了,使用lambda就有点过于本末倒置了。

  3. lambda就是用来定义一个匿名函数的,如果还要给他绑定一个名字的话,就会显得有点画蛇添足,通常是直接使用lambda函数

表达形式: lambda param1,…:return_value
和param相当于定义函数 时候传入的形参,return_value相当于return后面的值

1、应用在函数式编程中

像map、reduce、sorted、filter函数都支持函数作为参数,可以在其中嵌套使用,非常清晰明了。

            
              # 需求:将列表中的元素按照绝对值大小进行升序排列
list1 = [3,5,-4,-1,0,-2,-6]
sorted(list1, key=lambda x: abs(x))

            
          

当然,也可以如下:

            
               list1 
              
                =
              
              
                [
              
              
                3
              
              
                ,
              
              
                5
              
              
                ,
              
              
                -
              
              
                4
              
              
                ,
              
              
                -
              
              
                1
              
              
                ,
              
              
                0
              
              
                ,
              
              
                -
              
              
                2
              
              
                ,
              
              
                -
              
              
                6
              
              
                ]
              
              
                def
              
              
                get_abs
              
              
                (
              
              x
              
                )
              
              
                :
              
              
                return
              
              
                abs
              
              
                (
              
              x
              
                )
              
              
                sorted
              
              
                (
              
              list1
              
                ,
              
              key
              
                =
              
              get_abs
              
                )
              
            
          

只不过这种方式的代码看起来不够Pythonic

2、应用在闭包中

            
              
                def
              
              
                get_y
              
              
                (
              
              a
              
                ,
              
              b
              
                )
              
              
                :
              
              
                return
              
              
                lambda
              
               x
              
                :
              
              ax
              
                +
              
              b
y1 
              
                =
              
               get_y
              
                (
              
              
                1
              
              
                ,
              
              
                1
              
              
                )
              
            
          

当然,也可以用常规函数实现闭包,如下:

            
              
                def
              
              
                get_y
              
              
                (
              
              a
              
                ,
              
              b
              
                )
              
              
                :
              
              
                def
              
              
                func
              
              
                (
              
              x
              
                )
              
              
                :
              
              
                return
              
               ax
              
                +
              
              b
    
              
                return
              
               func
y1 
              
                =
              
               get_y
              
                (
              
              
                1
              
              
                ,
              
              
                1
              
              
                )
              
            
          

二、map函数:


功能 : 求一个序列或者多个序列进行函数映射之后的值,就该想到map这个函数

语法 map(function, iterable)
接收两个参数,第一个为函数,第二个为序列,序列的每个元素执行函数操作,并传入新的map对象中。

参数

  1. function:用def或用lambda定义。
  2. iterable:一个或多个可迭代的对象,可以是字符串、列表、字典。

因为返回的是一个map对象,所以不能直接输出,可以在其外面套上list()来显示或者通过for循环append显示。

通过例子加深理解

            
              
                def
              
              
                square
              
              
                (
              
              x
              
                )
              
              
                :
              
              
                return
              
               x
              
                *
              
              x
a
              
                =
              
              
                list
              
              
                (
              
              
                map
              
              
                (
              
              square
              
                ,
              
              
                [
              
              
                1
              
              
                ,
              
              
                2
              
              
                ,
              
              
                3
              
              
                ]
              
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              a
              
                )
              
              
                #上下两段代码相等
              
              

a 
              
                =
              
              
                list
              
              
                (
              
              
                map
              
              
                (
              
              
                lambda
              
               x
              
                :
              
              x
              
                **
              
              
                2
              
              
                ,
              
              
                [
              
              
                1
              
              
                ,
              
              
                2
              
              
                ,
              
              
                3
              
              
                ]
              
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              a
              
                )
              
            
          

输出结果 :[1, 4, 9]

map,不止能传入一个可迭代对象做为参数。也可以传入两个
            
              ls1
              
                =
              
              
                'ABC'
              
              
ls2
              
                =
              
              
                'abc'
              
              
                print
              
              
                (
              
              
                list
              
              
                (
              
              
                map
              
              
                (
              
              
                lambda
              
               x
              
                ,
              
              y
              
                :
              
              x
              
                +
              
              y
              
                ,
              
              ls1
              
                ,
              
              ls2
              
                )
              
              
                )
              
              
                )
              
            
          

输出结果:[‘Aa’, ‘Bb’, ‘Cc’]

三、filter函数


功能 :filter的功能是过滤掉序列中不符合函数条件的元素,当序列中要删减的元素可以用某些函数描述时,就应该想起filter函数。

语法 :filter(function, iterable)

接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,返回True或False,将返回True的元素放到filter对象中。

参数

  1. function def或lambda定义
  2. iterable 元组、字符串、字典、列表

因为返回的是一个对象,所以不能直接输出,可以在其外面套上list()来显示

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

输出结果:[2,4]

四、sorted函数


原文地址:https://www.cnblogs.com/sysu-blackbear/p/3283993.html
功能 :对List、Dict进行排序
语法 : sorted(iterable, cmp=None, key=None, reverse=False)
参数
iterable:迭代对象;
cmp:用于比较的函数,比较什么由key决定;
key:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项;
reverse:排序规则. reverse = True 降序 或者 reverse = False 升序,有默认值。
返回值:是一个经过排序的可迭代类型,与iterable一样。

五、zip函数

功能 :zip() 函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。
如果各个可迭代对象的元素 个数不一致 ,则返回的对象长度与 最短的可迭代对象 相同。
利用 * 号操作符,与zip相反,进行解压。

语法 : zip(iterable1,iterable2, …)

参数 :iterable – 一个或多个可迭代对象(字符串、列表、元祖、字典)

            
              
                >>
              
              
                >
              
               a 
              
                =
              
              
                [
              
              
                1
              
              
                ,
              
              
                2
              
              
                ,
              
              
                3
              
              
                ]
              
              
                #此处可迭代对象为列表
              
              
                >>
              
              
                >
              
               b 
              
                =
              
              
                [
              
              
                4
              
              
                ,
              
              
                5
              
              
                ,
              
              
                6
              
              
                ]
              
              
                >>
              
              
                >
              
               c 
              
                =
              
              
                [
              
              
                4
              
              
                ,
              
              
                5
              
              
                ,
              
              
                6
              
              
                ,
              
              
                7
              
              
                ,
              
              
                8
              
              
                ]
              
              
                >>
              
              
                >
              
               zipped 
              
                =
              
              
                zip
              
              
                (
              
              a
              
                ,
              
              b
              
                )
              
              
                >>
              
              
                >
              
               zipped

              
                <
              
              
                zip
              
              
                object
              
               at 
              
                0x02B01B48
              
              
                >
              
              
                #返回的是一个对象
              
              
                >>
              
              
                >
              
              
                list
              
              
                (
              
              zipped
              
                )
              
              
                [
              
              
                (
              
              
                1
              
              
                ,
              
              
                4
              
              
                )
              
              
                ,
              
              
                (
              
              
                2
              
              
                ,
              
              
                5
              
              
                )
              
              
                ,
              
              
                (
              
              
                3
              
              
                ,
              
              
                6
              
              
                )
              
              
                ]
              
              
                #使用list()函数转换为列表
              
              
                >>
              
              
                >
              
              
                list
              
              
                (
              
              
                zip
              
              
                (
              
              a
              
                ,
              
              c
              
                )
              
              
                )
              
              
                [
              
              
                (
              
              
                1
              
              
                ,
              
              
                4
              
              
                )
              
              
                ,
              
              
                (
              
              
                2
              
              
                ,
              
              
                5
              
              
                )
              
              
                ,
              
              
                (
              
              
                3
              
              
                ,
              
              
                6
              
              
                )
              
              
                ]
              
              
                >>
              
              
                >
              
               zipped 
              
                =
              
              
                zip
              
              
                (
              
              a
              
                ,
              
              b
              
                )
              
              
                >>
              
              
                >
              
              
                list
              
              
                (
              
              
                zip
              
              
                (
              
              
                *
              
              zipped
              
                )
              
              
                )
              
              
                #解压也使用list进行转换
              
              
                [
              
              
                (
              
              
                1
              
              
                ,
              
              
                2
              
              
                ,
              
              
                3
              
              
                )
              
              
                ,
              
              
                (
              
              
                4
              
              
                ,
              
              
                5
              
              
                ,
              
              
                6
              
              
                )
              
              
                ]
              
            
          

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论