zoukankan      html  css  js  c++  java
  • Python3-匿名函数、map()、reduce()、filter()

    一、匿名函数
      定义:
          没有函数名的函数
        形式:
    s = lambda [arg1 [,arg2,.....argn]]:expression
        lambda简化了函数定义的书写形式,使代码更为简洁。但是使用函数的定义方式更为直观,易理解。
    1 def fun(a):
    2     return a+1
        s相当于fun这个函数体,lambda相当于fun(),arg1,arg2...相当于fun函数里面的参数a,b...,冒号后面的expression相当于return后面的a+1
     
    二、应用场景:
            1.有些函数只是临时一用,而且它的业务逻辑也很简单时,就没必要使用def来定义,这个时候就可以用lambda
            2.函数都支持函数作为参数,lambda函数就可以应用
            示例:
    1 list1 = [{"a":10,"b":20},{"a":13,"b":20},{"a":9,"b":20}]
    2 m = max(list1,key=lambda x:x["a"])
    3 print("列表的最大值:",m)
            结果:列表的最大值: {'b': 20, 'a': 13}
     
     
    二、map()
        map(func, *iterables) --> map object
        接收一个函数func()和一个可迭代对象(这里理解成list),并通过把函数func依次作用在list的每个元素上,得到一个新的list并返回
        示例:
     1 list1 = [1,2,3,4,5,6,7]
     2 result = map(lambda x:x+10,list1)
     3 print(list(result))
     4  
     5 list1 = ["a","b","c","d","e","f"]
     6 result = map(lambda x:x+x,list1)
     7 print(list(result))
     8  
     9 list1 = ["a","b","c","d","e","f"]
    10 for index,i in enumerate(list1):
    11     list1[index]+=i
    12 print(list1)

     

    结果:
      [11, 12, 13, 14, 15, 16, 17]
      ['aa', 'bb', 'cc', 'dd', 'ee', 'ff']
      ['aa', 'bb', 'cc', 'dd', 'ee', 'ff']
     
    注意:map()函数不改变原有的list,而是返回一个新的list
     
        由于list包含的元素可以是任意类型,因此,map()不仅仅可以处理只包含数值的list,事实上可以处理包含任意类型的list,只要传入的函数func可以处理这种数据类型
     
        示例:假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,请利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的list
            
     
     1 # 方式一
     2 def func(s):
     3     return s[0:1].upper()+s[1:].lower()
     4  
     5 list1 = ["liLy","sakuRa","SeeLe"]
     6 result = map(func,list1)
     7 print(list(result))
     8  
     9 # 方式二
    10 list1 = ["kiaNa","SeeLe","liSa"]
    11 result1 = map(lambda x:x[0:1].upper()+x[1:].lower(),list1)
    12 print(list(result1)
    结果:  ['Lily', 'Sakura', 'Seele']
                 ['Kiana', 'Seele', 'Lisa']
     
    三、reduce()
        在Python3中,如果使用reduce,需要先从functools模块中导入:
            from functools import reduce
        reduce函数会对参数序列中的元素进行累积
        
        定义:
             reduce(function, sequence [, initial] ) -> value
        用法:
            function参数是一个有两个参数的函数,reduce依次对sequence中取一个元素,和上次调用function的结果做参数再次调用function
            第一次调用function时,如果提供initial参数,会以sequence中的而第一个元素和initial作为参数调用function,否则会以序列sequence中的前两个元素作为参数调用function
        
        示例:
     1 from functools import reduce
     2  
     3 list1 = [1,2,3,4,5,6]
     4 result = reduce(lambda x,y:x+y,list1)
     5 print(result)
     6  
     7 list1 = [1,2,3,4,5,6]
     8 result = reduce(lambda x,y:x+y,list1,10)
     9 print(result)
    10  
    11 tuple1 = (1,2,3,4,5)
    12 result = reduce(lambda x,y:x*y,tuple1,10)
    13 print(result)

     

    结果:21    31    1200
     
     
    四、filter()
        语法:
    filter(function, iterable)
        描述:
            filter()函数用于过虑序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用list()来转换
            该接受两个参数,第一个为函数,第二个为序列,序列每个元素作为参数传递给函数进行判断,然后返回True或者False,最后将返回True的元素放到新的列表中
        示例:
    1 list1 = [1,2,3,4,5,6]
    2 result = filter(lambda x:x > 3,list1)
    3 print(list(result))
        结果:[4, 5, 6]
     
    五、sorted()
            语法: 
    sorted(iterable, key=None, reverse=False) 
            参数说明:
                iterable -- 可迭代对象。
                key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
                reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
            描述:
                sorted()函数对所有可迭代对象进行排序操作
            注意sort与sorted的区别:   
                sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。list 的 sort 方法返回的是对已经存在的列表进行操作,
                而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
     
            示例:
     1 list1 = [2,3,5,1,7,6,9]
     2 result = sorted(list1)
     3 print(result)
     4  
     5 list1 = [2,3,5,1,7,6,9]
     6 result = sorted(list1,reverse=True)
     7 print(result)
     8  
     9 list1 = [2,3,5,1,7,6,9]
    10 result = sorted(list1,key=lambda x :x * -1)
    11 print(result)
    12  
    13 a_dict={'A':2,'B':3,'C':4,'D':1,'E':5}
    14 # lambda 构造匿名函数,以元组中第二个元素作为排序依据,即x[1]
    15 sorted_a_dict = sorted(a_dict.items(), key = lambda x:x[1], reverse = True)
    16 print(sorted_a_dict)
    结果:
           [1, 2, 3, 5, 6, 7, 9]
           [9, 7, 6, 5, 3, 2, 1]
           [9, 7, 6, 5, 3, 2, 1]
           [('E', 5), ('C', 4), ('B', 3), ('A', 2), ('D', 1)]
     
  • 相关阅读:
    猜数字游戏
    Visual Studio Code如何编写运行C、C++
    Git Submodule使用完整教程
    同一客户端多个git账号的配置
    让 Git Bisect 帮助你
    GitHub 风格的 Markdown 语法
    git 命令图解
    图解git中的最常用命令
    Understanding the Bias-Variance Tradeoff
    Seven Techniques for Data Dimensionality Reduction
  • 原文地址:https://www.cnblogs.com/DemonKnifeGirl/p/12997269.html
Copyright © 2011-2022 走看看