zoukankan      html  css  js  c++  java
  • python lambda表达式应用

    在python中有两种函数,一种是通过def得到的函数,一种是匿名函数,也就是lambda表达式。语法格式如下:

    lambda argument_list:expersion

    语法中的argument_list是参数列表,它的结构与Python中函数(function)的参数列表是一样的,比如:

    a,b
    a=1,b=2
    *args
    **kwargs
    a,b=1,*args
    空
    ....

    语法中的expression是一个关于参数的表达式,表达式中出现的参数需要在argument_list中有定义,并且表达式只能是单行的。比如:

    1
    None
    a+b
    sum(a)
    1 if a >10 else 0
    ......

    应用1,求变量与整数的和,一般来说可以直接打印变量与整数,或者通过定义函数来实现,还可以通过lambda表达式来实现,代码如下:

     1 #直接打印
     2 x = 2
     3 print(x + 2)
     4 
     5 #定义函数
     6 def asum(x):
     7     return x+2 #返回变量与2的和
     8 
     9 a = asum(2) #调用函数,并传实参2,计算和
    10 print(a) #4
    11 
    12 #用lambda表达式写
    13 b = lambda x:x+2 #撰写表达式并赋值给变量b
    14 print(b(3)) #打印是否符合预期
    15 
    16 #也可以这样写lambda表达式
    17 c = (lambda x:x+2)(3) #在表达式后面直接跟x的值,并赋给变量c
    18 print(c) #打印

    2,将lambda表达式传递给其他函数结合使用:

      传递给filter

    d = filter(lambda x:x%3==0,list(range(1,10))) #定义变量
    
    print(list(d))

      传递给map

    squares = map(lambda x:x**2,range(1,10))
    
    print(list(squares))

      与sorted函数结合使用

    1 e = [('b',3),('a',2),('d',4),('c',1)]
    2 f = sorted(e,key=lambda x:x[0]) #按照列表e的第一个元素进行排序,也就是按照abcd
    3 g = sorted(e,key=lambda x:x[1]) #按照列表e的第二个元素进行排序,也就是按照1234
    4 print(e) #原始列表
    5 print(f) #[('a', 2), ('b', 3), ('c', 1), ('d', 4)]
    6 print(g) ##[('c', 1), ('a', 2), ('b', 3), ('d', 4)]

      与reduce函数结合使用

    1 from functools import reduce
    2 h = reduce(lambda a,b : '{},{}'.format(a,b),[1,2,3,4,5,6,7,8,9])
    3 print(h)
    4 
    5 j = reduce(lambda x,y : x+y, [1,2,3,4,5]) #等同于(((((1+2))+3)+4)+5)
    6 print(j)

    3,在函数内嵌套使用,lambda表达式做为返回值:

    1 def increment(n):
    2     return lambda x:x+n #返回lambda表达式
    3 
    4 k = increment(5) #调用函数并赋值给变量k
    5 print(k(2)) #理解为将2赋值给匿名函数里的x,结果为7

    4,字符串联合:

    l = (lambda x = 'bb', y = 'cc', z = 'aa' : x+y+z)
    
    print(l('foo'))

    5,判断字符串是否以某个字母开头:

    1 names = ['Anne','amy','Bob','David','Carrie','Barbara','Zach']
    2 b_names = filter(lambda x:x.startswith('B'),names)
    3 print(list(b_names))

    6,求两个列表元素序列和:

    a = [1,2,3,4,5]
    
    b = [5,6,7,8,9]
    
    print(list(map(lambda x,y : x+y, a,b)))

    7,求字符串中每个单词的长度:

    sentence = "Welcome to Python world"
    words = sentence.split()
    lengths = map(lambda x:len(x),words)
    print(list(lengths))

    代码并无意义,仅供理解学习使用。

  • 相关阅读:
    luogu 1726 上白泽惠音
    POJ1419 Graph Coloring(最大独立集)(最大团)
    POJ2284 That Nice Euler Circuit (欧拉公式)(计算几何 线段相交问题)
    POJ 1966 Cable TV Network(顶点连通度的求解)
    POJ 1523 SPF(寻找关节点)
    Dwarves (有向图判环)
    POJ 3041 Asteroids(最小点覆盖集)
    POJ 1043 What's In A Name?(唯一的最大匹配方法)
    POJ Girls and Boys (最大独立点集)
    Jewelry Exhibition(最小点覆盖集)
  • 原文地址:https://www.cnblogs.com/mafu/p/13217735.html
Copyright © 2011-2022 走看看