Python高阶函数:map、filter、reduce的用法和区别
Python高阶函数:map、filter、reduce的用法和区别
Python作为一门高性能、多用途的语言,有着丰富的内置函数库。其中包括了map、filter、reduce三个高阶函数,它们可以让我们更加便捷的操作数据。本文将为您介绍这三个函数的用法和区别。
1. map函数
map函数可以对一个集合中的每一个元素应用一个给定的函数,它的基本语法如下:
map(function, iterable)
其中,function表示要应用的函数,iterable表示要迭代的序列,返回值是一个新的map对象。
比如下面的例子,将列表中的每个元素乘以2:
def double(x):
return x * 2
nums = [1,2,3,4,5]
result = map(double, nums)
print(list(result))
运行结果为:
[2, 4, 6, 8, 10]
2. filter函数
filter函数可以对一个序列中的元素进行筛选,它的基本语法如下:
filter(function, iterable)
其中,function表示判断函数,iterable表示要迭代的序列,返回值是一个新的filter对象,其中包含了符合条件的元素。
比如下面的例子,将列表中的奇数返回:
def odd(x):
return x % 2 != 0
nums = [1,2,3,4,5]
result = filter(odd, nums)
print(list(result))
运行结果为:
[1, 3, 5]
3. reduce函数
reduce函数是Python 2中的内置函数,在Python 3中需要从functools库中导入。它可以对一个序列中的元素进行累积操作,而不仅是简单的聚合操作。它的基本语法如下:
reduce(function, iterable[, initializer])
其中,function表示累积函数,它接受两个参数,iterable表示要迭代的序列,initializer是可选的初始值,如果存在这个参数,那么就会和序列中的 个元素一起作为累积的起始值,否则会从序列中的第二个元素开始进行累积。
比如下面的例子,将列表中所有的元素相乘:
from functools import reduce
def multiply(x, y):
return x * y
nums = [1,2,3,4,5]
result = reduce(multiply, nums)
print(result)
运行结果为:
120
4. 区别
(1)map和filter都是对序列中的每一个元素进行操作,而reduce则是对序列中的每一个元素进行累积操作。
(2)map和filter的返回值是一个新的对象(map对象或者filter对象),需要通过list等函数转换成列表或其他对象。而reduce直接返回一个数值。
(3)在函数的定义上,map和filter需要传入一个用来处理元素的函数,而reduce则需要传入两个参数,一个是累计函数,一个是序列。
总结:
map、filter、reduce这三个函数在Python的函数库中一直占据着重要的地位,是我们处理数据时不可缺少的工具。比如在对图像进行处理或者分析数据统计信息时,我们会大量使用到它们。掌握这三个函数的用法和区别可以让我们更加顺手的操作Python并提高编程效率。
