欢迎访问宙启技术站
智能推送

Python函数中的lambda表达式使用技巧

发布时间:2023-06-27 06:51:12

Python中的lambda表达式是一个匿名函数,它的主要作用是在需要函数对象的任何地方使用。lambda语法非常简单,它的基础形式是:lambda argument_list: expression

在这种语法形式下,lambda函数可以从一个或多个变量(argument_list)中获取参数,然后利用 expression 进行计算,并将计算结果作为函数的返回值。由于 lambda 函数没有名字,所以往往会将其作为赋值表达式的右侧,或者直接传递给其他函数。

除了基础语法外,lambda表达式还有更多的使用技巧,下面就让我们一一来讨论一下。

1. 在sorted()中使用lambda表达式进行排序

sorted()是Python内置函数之一,它用于对序列进行排序。在排序操作中,可以使用lambda表达式作为关键字参数进行排序。例如,对一个列表进行升序排序可以使用以下代码:

lst = [5, 2, 1 , 4, 3]
sorted_lst = sorted(lst, key=lambda x: x)
print(sorted_lst)

输出结果为:[1, 2, 3, 4, 5]

这里的lambda表达式 lambda x: x 实际上是返回x本身的表达式。在sorted()函数中,key参数需要一个函数对象,用于指定排序的依据。因此,通过lambda表达式,我们可以方便地指定排序的规则。

除了简单排序之外,还可以根据列表中元素的某个属性进行排序。例如,对一个学生列表进行按照年龄升序排序可以使用以下代码:

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __repr__(self):
        return f"{self.name}({self.age})"
 
students = [Student("Tom", 18), Student("Jerry", 20), Student("Mike", 19)]
sorted_students = sorted(students, key=lambda student: student.age)
print(sorted_students)

输出结果为:[Tom(18), Mike(19), Jerry(20)]

在这个例子中,lambda表达式 lambda student: student.age 返回学生对象的年龄属性,用于指定排序的依据。通过这种方式,我们可以更加方便地对复杂对象进行排序。

2. 在map()中使用lambda进行迭代操作

map()是Python内置函数之一,用于对序列中的每个元素进行操作,并返回操作后的序列。在map()中,可以使用lambda表达式作为要执行的操作。例如,将一个列表中的元素都平方一下可以使用以下代码:

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

输出结果为:[1, 4, 9, 16, 25]

在这个例子中,lambda表达式 lambda x: x**2 实际上是返回x的平方的表达式。在map()函数中,我们将这个lambda表达式传递给了第一个参数,用于对lst中的每个元素进行操作。

除了简单操作之外,还可以进行复杂的逻辑操作。例如,计算两个列表对应位置上元素的和可以使用以下代码:

lst1 = [1, 2, 3]
lst2 = [4, 5, 6]
sum_lst = list(map(lambda x, y: x+y, lst1, lst2))
print(sum_lst)

输出结果为:[5, 7, 9]

在这个例子中,lambda表达式 lambda x, y: x+y 实际上是返回x和y的和的表达式。在map()函数中,我们将这个lambda表达式传递给了第一个参数,同时将lst1和lst2作为第二个参数和第三个参数,用于对两个列表对应位置上的元素进行操作。

3. 在filter()中使用lambda进行过滤操作

filter()是Python内置函数之一,用于对序列中的元素进行过滤,并返回符合条件的元素序列。在filter()中,可以使用lambda表达式作为过滤条件。例如,将一个列表中的偶数元素取出来可以使用以下代码:

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

输出结果为:[2, 4]

在这个例子中,lambda表达式 lambda x: x % 2 == 0 实际上是返回判断x是否为偶数的表达式。在filter()函数中,我们将这个lambda表达式传递给了第一个参数,用于对lst中的每个元素进行过滤。

除了简单的过滤操作之外,还可以进行复杂的逻辑过滤。例如,过滤一个学生列表中,年龄大于18岁且名字不为Tom的学生可以使用以下代码:

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __repr__(self):
        return f"{self.name}({self.age})"
 
students = [Student("Tom", 18), Student("Jerry", 20), Student("Mike", 19)]
filtered_students = list(filter(lambda student: student.age > 18 and student.name != "Tom", students))
print(filtered_students)

输出结果为:[Jerry(20), Mike(19)]

在这个例子中,lambda表达式 lambda student: student.age > 18 and student.name != "Tom" 实际上是返回判断学生对象是否满足条件的表达式。在filter()函数中,我们将这个lambda表达式传递给了第一个参数,用于对students中的每个学生对象进行过滤。

4. 在reduce()中使用lambda进行累积操作

reduce()是Python内置函数之一,用于对序列中的元素进行累积操作,并返回累积后的结果。在reduce()中,可以使用lambda表达式作为累积的规则。例如,计算一个列表中所有元素的和可以使用以下代码:

from functools import reduce
 
lst = [1, 2, 3, 4, 5]
sum_lst = reduce(lambda x, y: x+y, lst)
print(sum_lst)

输出结果为:15

在这个例子中,lambda表达式 lambda x, y: x+y 实际上是返回x和y的和的表达式。在reduce()函数中,我们将这个lambda表达式传递给了第一个参数,同时将lst作为第二个参数,用于对列表中的元素进行累积操作。

除了简单的累积操作之外,还可以进行复杂的逻辑累积。例如,计算一个学生列表中所有学生年龄的平均值可以使用以下代码:

from functools import reduce
 
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age
 
students = [Student("Tom", 18), Student("Jerry", 20), Student("Mike", 19)]
avg_age = reduce(lambda x, y: x + y.age, students, 0) / len(students)
print(avg_age)

输出结果为:19

在这个例子中,lambda表达式 lambda x, y: x + y.age 实际上是返回x和学生对象y的年龄属性的和的表达式。在reduce()函数中,我们将这个lambda表达式传递给了第一个参数,同时将students作为第二个参数,初始值0作为第三个参数,用于计算所有学生对象的年龄总和。最后,我们用len(students)计算学生的平均年龄。

总结:

以上就是在Python函数中利用lambda表达式的