python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python内置函数map

python内置函数map/filter/reduce详解

作者:科雷软件测试

在Python中,map(), filter(), 和 reduce() 是内置的高级函数(实际是class),用于处理可迭代对象(如列表、元组等)的元素,这篇文章主要介绍了python内置函数map/filter/reduce的相关知识,需要的朋友可以参考下

      在Python中,map(), filter(), 和 reduce() 是内置的高级函数(实际是class),用于处理可迭代对象(如列表、元组等)的元素。这些函数通常与lambda函数一起使用,以简洁地表达常见的操作。下面我将分别解释这三个函数。

1. map()函数

map() 函数将一个函数应用于一个或多个可迭代对象的每个元素,并返回一个迭代器,该迭代器包含函数应用于每个元素的结果。

以下是builtins.map的源码:__init__()函数可以看出需要传入一个函数func和至少一个可迭代对象。

map(function, iterable, ...)

注意事项:

示例

传入一个可迭代对象

#通过map函数 返回经过平方计算后的结果
value1 = map(lambda x: x ** 2, [1, 2, 3, 4, 5])
#之前文章讲过使用list(),将可迭代对象转为列表
print(list(value1))
#结果
[1, 4, 9, 16, 25]

传入多个可迭代对象

#通过map函数 返回两个可迭代对象中每个对应位置元素的乘积平方
value2 = map(lambda x,y: x*y, [1, 2, 3, 4, 5],(2,4,6,8,10))
#之前文章讲过使用list(),将可迭代对象转为列表
print(list(value2))
#结果
[2, 8, 18, 32, 50]

但是注意传入的元素个数与lambda需要的参数个数要一致,否则会报错

比如上面的例子我们只传入一个迭代对象,程序执行后会报错

value2 = map(lambda x,y: x*y, [1, 2, 3, 4, 5])
print(list(value2))
#结果报错
TypeError: <lambda>() missing 1 required positional argument: 'y'

2. filter()

filter() 函数使用一个函数作为条件,并返回一个迭代器,该迭代器包含所有使该函数返回True的可迭代对象的元素。

以下是builtins.filter的源码:__init__()函数可以看出需要传入一个函数func和一个可迭代对象。

filter(function, iterable)

示例

传入一个可迭代对象,使用lambda函数获取被2整除的数

numbers = [10, 3, 9, 8, 6]
filternumbers = filter(lambda x: x % 2 == 0, numbers)
print(list(filternumbers))
#结果
[10, 8, 6]

3. reduce()

reduce() 函数将一个二元操作符(或函数)连续地应用于一个可迭代对象的元素,从而将其减少为单个值。python3的版本reduce() 函数在Python的functools 模块中,使用时需要先导入。

reduce(function, sequence, initial=_initial_missing)

示例

1) 将可迭代对象的值相加

from functools import reduce
numbers = [1, 2, 3, 4, 5]
sumnumbers = reduce(lambda x, y: x + y, numbers)
print(sumnumbers) 
# 输出: 15

当然像上面这种简单的例子,用sum(numbers)函数更简单。

2) 传入1个初始值作为第1个元素

from functools import reduce
numbers = [1, 2, 3, 4, 5]
sumnumbers = reduce(lambda x, y: x + y, numbers,6)
print(sumnumbers) 
# 输出: 21

到此这篇关于python内置函数map/filter/reduce详解的文章就介绍到这了,更多相关python内置函数map内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文