Python中函数式编程中map、reduce、filter函数的用法
发布时间:2023-06-01 04:49:20
Python是一种高级编程语言, 它支持多种编程范式, 包括面向对象编程、过程式编程和函数式编程。在函数式编程中,函数被看成是一等公民,可以作为变量传递、作为参数和返回值、也可以在代码中组合使用,以实现更高层次的功能。Python中一些常见的函数式编程函数有map、reduce和filter,下面将分别对它们的用法进行分析。
1. map
map(function, iterable, ...)
map函数接受一个函数和一个或多个可迭代对象作为参数,返回一个zip对象。它将函数作用于可迭代对象的每一个元素上,将结果打包成一个列表返回。示例代码如下:
# 把列表中每一个元素都乘以 2
lst1 = [1, 2, 3, 4, 5]
new_lst1 = list(map(lambda x: x * 2, lst1))
print(new_lst1)
# 把元组中每一个元素的 个字符变成大写
lst2 = [('apple', 1), ('banana', 2), ('orange', 3)]
new_lst2 = list(map(lambda x: (x[0].capitalize(), x[1]), lst2))
print(new_lst2)
输出结果:
[2, 4, 6, 8, 10]
[('Apple', 1), ('Banana', 2), ('Orange, 3)]
2. reduce
reduce(function, iterable[, initializer])
reduce函数接受一个函数和一个可迭代对象作为参数,返回一个单值。它使用指定的函数,将可迭代对象成对相邻的元素进行聚合,直到只剩下一个值为止。如果指定了初始值,则在计算开始之前将其用作 项的值。reduce函数需要导入functools库。示例代码如下:
from functools import reduce
# 计算列表中所有元素的累积乘积
lst1 = [1, 2, 3, 4, 5]
result1 = reduce(lambda x, y: x*y, lst1)
print(result1)
# 计算元组列表中第二个元素的和
lst2 = [('apple', 1), ('banana', 2), ('orange', 3)]
result2 = reduce(lambda x, y: x+y[1], lst2, 0)
print(result2)
输出结果:
120 6
3. filter
filter(function, iterable)
filter函数接受一个函数和一个可迭代对象作为参数,返回一个zip对象。它使用指定的函数对可迭代对象中的每一个元素进行检查,将满足条件的元素筛选出来,形成一个新的列表。示例代码如下:
# 筛选列表中的偶数
lst1 = [1, 2, 3, 4, 5]
new_lst1 = list(filter(lambda x:x%2==0, lst1))
print(new_lst1)
# 筛选元组列表中第二个元素大于2的元素
lst2 = [('apple', 1), ('banana', 2), ('orange', 3)]
new_lst2 = list(filter(lambda x: x[1]>2, lst2))
print(new_lst2)
输出结果:
[2, 4]
[('orange', 3)]
这三个函数在函数式编程中非常有用,可以简洁高效地解决一些问题。掌握这些函数的用法有助于提高Python编程的效率。
