Python lambda匿名函数妙用

最近一直在坚持leetcode每日一题,遇到了一种很有意思且方便的lambda匿名函数,记录一下备忘~

语法

lambda函数的语法非常简单,如下:

1
lambda [arg1 [,arg2,.....argn]]:expression

举个栗子:

1
2
3
4
5
6
7
8
f = lambda x,y:x+y
f(1,2)#结果就是1+2=3

#上述lambda表达式等价于下面的函数

def func_(x,y):
return x+y
func_(1,2)

语法非常简单,但是可以和其他常用函数组合起来实现很多效果。

将lambda函数作为参数传递给其他函数

1.与map函数结合

map() 会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

1
map(function, iterable, ...)

此时lambda函数用于指定对列表中每一个元素的共同操作

1
2
3
4
5
6
7
# 求两个列表元素的和

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

2.与filter函数结合

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

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

1
filter(function, iterable)

此时lambda函数用于指定过滤列表元素的条件。

1
2
3
4
5
6
7
8
9
# 筛选偶数
>>> list(filter(lambda x: x%2==0, [1,2,3,4,5,6]))
[2, 4, 6]

# 等价于下面的列表推导式
>>> l = [x for x in [1,2,3,4,5,6] if x%2==0]
>>> l
[2, 4, 6]

3.与sorted函数结合

sorted() 函数对所有可迭代的对象进行排序操作

1
sorted(iterable, cmp=None, key=None, reverse=False)

sort 与 sorted 区别:

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

此时lambda函数用于指定对列表中所有元素进行排序的准则:

1
2
3
4
5
>>> info = [('James',32), ('Alies',20), ('Wendy',25)]
>>> sorted(info, key=lambda age:age[1]) # 按照第二个元素,索引为1排序
[('Alies', 20), ('Wendy', 25), ('James', 32)]
>>> sorted(info, key=lambda age:-age[1])# 按照第二个元素,索引为1排序降序
[('James', 32), ('Wendy', 25), ('Alies', 20)]

4.与reduce函数结合

reduce() 函数会对参数序列中元素进行累积。

1
reduce(function, iterable[, initializer])

此时lambda函数用于指定列表中两两相邻元素的结合条件:

1
2
3
4
5
6
7
8
>>>def add(x, y) : # 两数相加
... return x + y
...
>>> reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5
15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
15

总结

lambda 并不会带来程序运行效率的提高,只会使代码更简洁,可以与一些python内置函数使用,增加灵活性。


Python lambda匿名函数妙用
https://chujian521.github.io/blog/2022/06/29/Python-lambda匿名函数妙用/
作者
Encounter
发布于
2022年6月29日
许可协议