6.3 map、filter 与 reduce
map()、filter() 和 reduce() 可以把数据处理拆成清晰的步骤。它们常常和短小的 lambda 函数配合使用。lambda 是匿名函数(anonymous function),适合表达很短的转换规则或判断规则。
数据处理流水线
可以把一组数据想成一条数据处理流水线(data pipeline):
filter():决定哪些元素留下。map():把每个元素转换成新值。reduce():把多个值合并成一个结果。
正在加载交互实验...
奇数平方和
下面的程序计算 0 到 9 中所有奇数的平方和。
python
from functools import reduce
numbers = list(range(10))
print("原始列表 =", numbers)
odds = list(filter(lambda x: x % 2 == 1, numbers))
print("奇数 =", odds)
squares = list(map(lambda x: x ** 2, odds))
print("平方 =", squares)
total = reduce(lambda x, y: x + y, squares)
print("总和 =", total)运行结果:
text
原始列表 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
奇数 = [1, 3, 5, 7, 9]
平方 = [1, 9, 25, 49, 81]
总和 = 165正在加载概念检查...
什么时候使用 lambda
lambda 适合表达非常短的匿名函数。例如 lambda x: x ** 2 表示“输入 x,返回 x 的平方”。
如果处理逻辑比较长,应该使用普通的 def 函数。不要为了追求简短而牺牲可读性。
正在加载概念检查...
正在加载本节练习...