filter、map、reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是Python列表方法的三架马车.

1. filter函数的功能相当于过滤器。

filter函数的定义:
filter(function or None, sequence) -> list, tuple, or string
function是一个谓词函数,接受一个参数,返回布尔值True或False。
filter函数会对序列参数sequence中的每个元素调用function函数,最后返回的结果包含调用结果为True的元素。
返回值的类型和参数sequence的类型相同
比如返回序列中的所有偶数:
def is_even(x):
  return x & 1 != 0
 
filter(is_even, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
返回结果为:
[1, 3, 5, 7, 9]
如果function参数为None,返回结果和sequence参数相同。
2.map函数

map函数会根据提供的函数对指定序列做映射。
map函数的定义:
map(function, sequence[, sequence, ...]) -> list
通过定义可以看到,这个函数的第一个参数是一个函数,剩下的参数是一个或多个序列,返回值是一个集合。
function可以理解为是一个一对一或多对一函数,map的作用是以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的list。
比如要对一个序列中的每个元素进行平方运算:
map(lambda x: x ** 2, [1, 2, 3, 4, 5])
返回结果为:
[1, 4, 9, 16, 25]
在参数存在多个序列时,会依次以每个序列中相同位置的元素做参数调用function函数。
比如要对两个序列中的元素依次求和。
map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
map返回的list中第一个元素为,参数序列1的第一个元素加参数序列2中的第一个元素(1 + 2),
list中的第二个元素为,参数序列1中的第二个元素加参数序列2中的第二个元素(3 + 4),
依次类推,最后的返回结果为:
[3, 7, 11, 15, 19]
要注意function函数的参数数量,要和map中提供的集合数量相匹配。
如果集合长度不相等,会以最小长度对所有集合进行截取。
当函数为None时,操作和zip相似:
map(None, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
返回结果为:
[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
 

3.reduce函数
reduce函数,reduce函数会对参数序列中元素进行累积。
reduce函数的定义:
reduce(function, sequence[, initial]) -> value
function参数是一个有两个参数的函数,reduce依次从sequence中取一个元素,和上一次调用function的结果做参数再次调用function。
第一次调用function时,如果提供initial参数,会以sequence中的第一个元素和initial作为参数调用function,否则会以序列sequence中的前两个元素做参数调用function。
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6], 1)
结果为21(  (((((1+2)+3)+4)+5)+6)  )
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6])
结果为20
 
注意function函数不能为None。

 
例子:
print range(6)    # 0,1,2,3,4,5
print range(1,6)  # 1,2,3,4,5
print reduce(lambda x,y:x*y, range(1,6))  #1*2*3*4*5

def action(x):
    return lambda y: x+y

f = action(2) # this is a lambda object
print f(3)    # 5

----------------------------------------------------------------------------------

例1:用map和reduce实现5的阶乘相加(5!+4!+3!+2!+1!)
>>>print reduce(lambda x,y:x*y,range(1,6))    120
>>>print reduce(lambda x,y:x*y,range(1,5))    24
>>>print reduce(lambda x,y:x*y,range(1,4))    6
>>>print reduce(lambda x,y:x*y,range(1,3))    2
>>>print reduce(lambda x,y:x*y,range(1,2))    1
把上一步的结果变成一个阶乘列表
>>>print map(lambda a:reduce(lambda x,y:x*y,range(1,a+1)),range(1,6))
[1, 2, 6, 24, 120]
最后把阶乘列表相加,第一题解决
>>>print reduce(lambda m,n:m+n,map(lambda a:reduce(lambda x,y:x*y,range(1,a+1)),range(1,6)))
153
例2:用filter将100~200以内的质数过滤出来
质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数
>>>filter(lambda N:len(filter(lambda M:N%M==0,range(2,int(N**0.5)+1)))==0,range(100,201))

 

Python内置函数filter, map, reduce相关推荐

  1. 自定义生成器函数模拟Python内置函数filter()

    祝"Python小屋"全体朋友新年快乐,身体健康,万事如意! ================== 作为Python函数式编程的三大巨头之一,内置函数filter()的地位是非常重 ...

  2. Python内置函数filter()和匿名函数lambda解析

    一.内置函数filter filter()函数是 Python 内置的一个高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回由符合条件迭代器 ...

  3. python内置函数之map函数的水桶效应------计算几个列表中相同位置的数据的和

    与内置函数zip()都是水桶效应 lst1 = [1, 3, 5, 7] lst2 = [2, 4, 6, 8, 10] m = map(lambda x, y, z: x + y+ z, lst1, ...

  4. Python内置函数zip map filter的使用

    并行遍历zip zip会取得一个或多个序理为参数,然后返回元组的列表,将这些序列中的并排的元素配成对. L1=[1,2,3,4] L2=[5,6,7,8] L3=zip(L1,L2) print(L3 ...

  5. Python 内置函数 filter()

    假设出现异常收到一个10万条类脏数据,类似底下: information = [158804023652,'evan','互联网行业','阿里巴巴',15625445635,15884236525.. ...

  6. [转载] Python 内置函数 lambda、filter、map、reduce

    参考链接: Python lambda (匿名函数) | filter, map, reduce Python 内置了一些比较特殊且实用的函数,使用这些能使你的代码简洁而易读. 下面对 Python ...

  7. python filter内置函数_python 内置函数filter

    python 内置函数filter class filter(object): """ filter(function or None, iterable) --> ...

  8. python filter函数_python 内置函数filter

    python 内置函数filter class filter(object): """ filter(function or None, iterable) --> ...

  9. python内置函数boolsum_Python - 内置函数

    Python - 内置函数 filter filter(处理逻辑, 可遍历对象)遍历序列中的每个元素,判断每个元素的布尔值为True则保留元素. 用法:返回执行结果为TRUE的入参(入参是列表字符元组 ...

最新文章

  1. 神经网络中的神经元常见激活函数绘制
  2. 欢迎参加“城市大脑与应急管理”专家研讨会
  3. Android之自定义控件显示点赞用户并通过用户名称进入该用户主页的功能
  4. 服务器如何删除所有磁盘信息,关于怎样删除EFI分区,简单省事,很多换下来的硬盘都有这个分区...
  5. left join 重复数据_Python数据分析整理小节
  6. 自动注入、加载 properties 文件、scope 属性、单例设计模式
  7. 男朋友花3000元买一块电脑显卡,他是怎么想的?
  8. Javascript Number.MIN_VALUE
  9. c语言程序设计教程期末考试,《C语言程序设计》课程考核方案
  10. Linux学习之Linux系统目录简概
  11. ThinkPhp报错:thinkphp\library\think\Template.php Line(1243) template not exists:...test\...\index.html
  12. Alpha通道的概念与功能
  13. Code Review之P3C的安装使用
  14. Comsol 2020全套教学视频 教程入门讲解新手的福音
  15. 相比于深度学习,传统的机器学习算法难道就此没落了吗,还有必要去学习吗?
  16. 迅为IMX6ULL教程更新至2060+页,裸机开发,Linux系统移植,驱动开发,构建文明系统,QT开发,系统编程
  17. 迭代最小二乘拟合椭圆
  18. CentOS7安装nfdump+nfsen+sflow 实现流量监控
  19. cf 1324D. Pair of Topics
  20. Numpy + Matplotlib 绘制白色画图

热门文章

  1. ueditor 覆盖下拉框问题解决
  2. 毁前的圆明园竟然这么美
  3. 8个数据清洗Python代码,复制可用,最长11行 | 资源
  4. 华为中兴腾讯拿下国家科学技术进步奖,中南大学一作奖项总数全国第三
  5. “哇靠”,小米最AI手机MIX 2S发布了
  6. 自动驾驶公司Momenta完成B2轮融资,凯辉领投GGV跟投
  7. 一文看懂搜狗招股书:90次提到AI,王小川持股5%,净利3.7亿
  8. CentOS 7使用通过二进制包安装MySQL 5.7.18
  9. JAVA类的无参方法
  10. js中的正则表达式(2)