Python filter,map,reduce

filter、map、reduce,都是对一个集合进行处理,filter 用于过滤,map 用于映射,reduce 用于归并。是Python列表方法的三架马车。
1 filter
filter会根据提供的函数对指定序列做过滤。
filter 函数的定义:filter(function or None, sequence) -> list, tuple, or string
function 是一个谓词函数,接受一个参数,返回布尔值 True 或 False。
filter 函数会对序列参数 sequence 中的每个元素调用 function 函数,最后返回的结果包含调用结果为 True 的元素。
返回值的类型和参数 sequence 的类型相同
比如返回序列中的所有偶数:
|  |  | 
如果 function 参数为 None,返回结果和 sequence 相同。
|  |  | 
2 map
map函数会根据提供的函数对指定序列做映射。
map 函数的定义:map(function, sequence[, sequence, ...]) -> list
通过定义可以看到,这个函数的第一个参数是一个函数,剩下的参数是一个或多个序列,返回值是一个集合。
function 可以理解为是一个一对一或多对一函数,map 的作用是以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的 list。
比如要对一个序列中的每个元素进行平方运算:
|  |  | 
在参数存在多个序列时,会依次以每个序列中相同位置的元素做参数调用 function 函数。
比如要对两个序列中的元素依次求和。
|  |  | 
map 返回的
- list[0]:- 参数序列 1 的第一个元素加参数序列 2 中的第一个元素 (1 + 2)
- list[1]:- 参数序列 1 中的第二个元素加参数序列 2 中的第二个元素 (3 + 4)
- ……
- 依次类推,最后的返回结果为:[3, 7, 11, 15, 19]
要注意 function 函数的参数数量,要和 map 中提供的集合数量相匹配。
而且如果集合长度不相等,会以最小长度对所有集合进行截取。
当函数为 None 时,操作和 zip 相似:
|  |  | 
3 reduce
reduce函数会对参数序列中元素进行累积
reduce 函数的定义:reduce(function, sequence[, initial]) -> value
function 参数是一个有两个参数的函数,reduce 依次从 sequence 中取一个元素,和上一次调用 function 的结果做参数再次调用 function。
第一次调用 function 时,如果提供 initial 参数,会以 sequence 中的第一个元素和 initial 作为参数调用 function,否则会以序列 sequence 中的前两个元素做参数调用 function。
|  |  | 
注意 function 函数不能为 None。
4 应用实例
4.1、用 map 和 reduce 实现 5 的阶乘相加(5!+4!+3!+2!+1!)
|  |  | 
把上一步的结果变成一个阶乘列表
|  |  | 
最后把阶乘列表相加,第一题解决
|  |  | 
4.2、用 filter 将 100~200 以内的质数过滤出来
质数,又称素数,指在一个大于 1 的自然数中,除了 1 和此整数自身外,不能被其他自然数整除的数
|  |  |