在Python中,map(), filter(), 和 reduce() 是内置的高级函数(实际是class),用于处理可迭代对象(如列表、元组等)的元素。这些函数通常与lambda函数一起使用,以简洁地表达常见的操作。下面我将分别解释这三个函数。
1. map()函数
map() 函数将一个函数应用于一个或多个可迭代对象的每个元素,并返回一个迭代器,该迭代器包含函数应用于每个元素的结果。
以下是builtins.map的源码:__init__()函数可以看出需要传入一个函数func和至少一个可迭代对象。
map(function, iterable, ...)
- function:接收一个或多个参数的函数。
- iterable:一个或多个可迭代对象,如列表、元组、字符串等。
注意事项:
- map() 函数返回的是一个迭代器,如果你需要一个列表或其他可迭代对象,你需要使用 list() 或其他相应的函数来转换它。
- 当使用 map() 函数时,请确保传递给它的函数能够正确地处理可迭代对象的元素。如果函数引发异常,则 map() 将停止迭代。
示例
传入一个可迭代对象
#通过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)
- 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)
- function:该函数接受两个参数并返回一个值。
- sequence:一个可迭代对象,如列表、元组等。
- initial(可选):传入该值表示操作的初始值。如果保持默认值,则使用可迭代对象的第一个元素作为初始值。
示例
1) 将可迭代对象的值相加
from functools import reducenumbers = [1, 2, 3, 4, 5]
sumnumbers = reduce(lambda x, y: x + y, numbers)
print(sumnumbers)
# 输出: 15
当然像上面这种简单的例子,用sum(numbers)函数更简单。
2) 传入1个初始值作为第1个元素
from functools import reducenumbers = [1, 2, 3, 4, 5]
sumnumbers = reduce(lambda x, y: x + y, numbers,6)
print(sumnumbers)
# 输出: 21
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习,谢谢大家。