Python:map,reduce,filter

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

今天通过几个程序温习这三个 Python 内置函数的用法。

小结

map, reduce, filter 是 Python 内置的 3 个 generator,它们都接受 2 个参数,并将 参数1(functor) 应用到 参数2(iterator) 上。不同的是,

  • map 依次将 iterator 产生的每个值代入 functor,对位生成新值;
  • reduce 递归式的每次作用于 iterator 产生的最前面两个值,并将结果作为第一个值代入下一次计算,最终结果一个值;
  • filter 依次将 iterator 产生的每个值代入返回 bool 值的 functor,并保留为 True 的那些结果。

map

廖雪峰:map

map(functor, iterator) 是一个 generator,它依次将 iterator 产生的每个值代入 functor,对位生成新值。

例如,

1
2
3
4
# 一个对输入列表里的值求平方的 generator
squared = map(lambda x: x ** 2, [3, 4, 5])
print(next(squared)) # 9
print(next(squared)) # 16

reduce

廖雪峰:reduce

reduce(functor, iterator) 是一个 generator,它递归式的每次作用于 iterator 产生的最前面两个值,并将结果作为第一个值代入下一次计算,最终结果一个值。

例如,

1
2
3
4
# sum()
from functools import reduce

print(reduce(lambda x, y: x+y, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])) # 55

filter

廖雪峰:filter

filter(functor, iterator) 是一个 generator,它依次将 iterator 产生的每个值代入返回 bool 值的 functor,并保留为 True 的那些结果。

例如,

1
2
3
x = filter(lambda x: x % 2 == 0, [1, 2, 4, 5, 6, 9, 10, 15])
print(next(x)) # 2
print(next(x)) # 4

下面这段代码作一个简单筛选,筛出质数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# %%
# 这段程序先定义两个 functor:\
# 生成奇数/判断是否能被整除
# 然后,通过 filter 函数使用前面 \
# 两个 functor 完成质数的筛出

def _odd_iter():
''' 一个返回奇数序列的 generator
'''
n = 1
while True:
n = n + 2
yield n


def _not_divisible(n):
''' 判断是否能被 n 整除的 functor
'''
return lambda x: x % n > 0


def primes():
''' 一个质数序列的 generator
'''
yield 2
it = _odd_iter() # 初始序列
while True:
n = next(it) # 返回序列的第一个数
yield n
it = filter(_not_divisible(n), it) # 构造新序列


prime = primes()
for _ in range(10):
print(next(prime))

# 2 3 5 7 11 13 17 19 23 29

都看到这儿了,不如关注每日推送的“科文路”、互动起来~~

至少,点个赞再走吧~

Author

xlindo

Posted on

2023-01-09

Updated on

2024-01-16

Licensed under

Comments