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

Python高阶函数:map、reduce、filter的用法和区别

发布时间:2023-06-01 05:49:06

Python中的map、reduce和filter是高阶函数的代表,它们都可以用于对集合中的元素进行操作和筛选。本文将深入探讨它们的用法和区别。

map函数

map()函数将一个函数映射到一个或多个列表上,从而将一个列表转化为另一个列表。它的语法格式为:

map(function, iterable, ...)

其中function表示映射函数,iterable表示接受映射函数处理的序列,可以是list、tuple、dict或其他可迭代类型。

示例:

假设有以下两个列表:

list1 = [1, 2, 3, 4, 5]

list2 = [10, 20, 30, 40, 50]

将list1和list2的元素按相同的位置一一对应进行相加操作,得到一个新的列表:

result = list(map(lambda x, y: x + y, list1, list2))

print(result)

输出结果为:

[11, 22, 33, 44, 55]

reduce函数

reduce()函数将一个函数累计地作用于序列的元素,从而将一个列表缩减为一个值。它需要引入functools模块才能使用。reduce()函数语法如下:

reduce(function, iterable[, initializer])

其中function表示累计函数,iterable表示可迭代对象,initializer表示初始值。

示例:

使用reduce()函数对一个列表进行累加操作:

import functools

list1 = [1, 2, 3, 4, 5]

result = functools.reduce(lambda x, y: x + y, list1)

print(result)

输出结果为:

15

filter函数

filter()函数用于过滤序列,将不符合条件的元素从序列中删除。它的语法格式为:

filter(function or None, iterable)

其中function表示过滤函数,可选参数,如果为None,则返回可迭代对象iterable中所有为True的元素。

示例:

将列表中的偶数筛选出来:

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

even_num = list(filter(lambda x : x % 2 == 0, list1))

print(even_num)

输出结果为:

[2, 4, 6, 8, 10]

区别

map()、reduce()和filter()的作用对象都是序列,它们的区别在于:

1. map()函数将一个函数作用于一个或多个列表上,返回一个新的列表。reduce()函数将函数作用于一个序列上,返回一个累加或缩减的结果。

2. map()函数对源数据进行转换,结果与源数据的大小相同,只是每个元素根据映射函数的要求进行了相应的处理。filter()函数对源数据进行筛选,结果比源数据小,只保留符合条件的元素。

3. map()函数可以接受多个可迭代对象作为参数,进行扩展操作。reduce()函数只能接受一个序列作为参数进行叠加或缩减操作。 

总之,map()、reduce()和filter()函数是Python语言中非常强大的高阶函数,熟练掌握它们的使用,对于快速解决一些常见的数据处理和科学计算问题非常有帮助。