Python内置函数之filter map reduce介绍


Posted in Python onNovember 30, 2014

Python内置了一些非常有趣、有用的函数,如:filter、map、reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是Python列表方法的三架马车。

1. filter函数的功能相当于过滤器。调用一个布尔函数bool_func来迭代遍历每个seq中的元素;返回一个使bool_seq返回值为true的元素的序列。

>>> N=range(10)
>>> print filter(lambda x:x>5,N)
[6, 7, 8, 9]

2. map函数func作用于给定序列的每个元素,并用一个列表来提供返回值。

>>> N1=[1,2,3]
>>> N2=[6,5,4]
>>> map(lambda x,y:x+y,N1,N2)
[7, 7, 7]
>>> map(lambda x:x+3,N1)
[4, 5, 6]

3. reduce函数,func为二元函数,将func作用于seq序列的元素,每次携带一对(先前的结果以及下一个序列的元素),连续的将现有的结果和下一个值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值。

>>> N=range(1,101)
>>> reduce(lambda x,y:x+y,N)
5050

例1:用map和reduce实现5的阶乘相加(5!+4!+3!+2!+1!)

>>>print reduce(lambda x,y:x*y,range(1,6))
>>>print reduce(lambda x,y:x*y,range(1,5))
>>>print reduce(lambda x,y:x*y,range(1,4))
>>>print reduce(lambda x,y:x*y,range(1,3))
>>>print reduce(lambda x,y:x*y,range(1,2))
'''

结果为

120
24
6
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 相关文章推荐
Python语言编写电脑时间自动同步小工具
Mar 08 Python
Python中类的初始化特殊方法
Dec 01 Python
pyqt5的QComboBox 使用模板的具体方法
Sep 06 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
Oct 18 Python
python仿evething的文件搜索器实例代码
May 13 Python
python3实现斐波那契数列(4种方法)
Jul 15 Python
Flask框架路由和视图用法实例分析
Nov 07 Python
在python中计算ssim的方法(与Matlab结果一致)
Dec 19 Python
详解Flask前后端分离项目案例
Jul 24 Python
Selenium alert 弹窗处理的示例代码
Aug 06 Python
写好Python代码的几条重要技巧
May 21 Python
python之json文件转xml文件案例讲解
Aug 07 Python
Python Queue模块详解
Nov 30 #Python
Python socket C/S结构的聊天室应用实现
Nov 30 #Python
Python open()文件处理使用介绍
Nov 30 #Python
Python fileinput模块使用介绍
Nov 30 #Python
Python 列表list使用介绍
Nov 30 #Python
Python 字典dict使用介绍
Nov 30 #Python
Python 序列化 pickle/cPickle模块使用介绍
Nov 30 #Python
You might like
56.com视频采集接口程序(PHP)
2007/09/22 PHP
PHP session有效期问题
2009/04/26 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
PHP多态代码实例
2015/06/26 PHP
php实现向javascript传递数组的方法
2015/07/27 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
javascript,jquery闭包概念分析
2010/06/19 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
JavaScript数组操作函数汇总
2016/08/05 Javascript
javascript表单正则应用
2017/02/04 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
Python 爬取携程所有机票的实例代码
2018/06/11 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
Python 面向对象部分知识点小结
2020/03/09 Python
python 绘制场景热力图的示例
2020/09/23 Python
经典c++面试题二
2015/08/14 面试题
string = null 和string = ''的区别
2013/04/28 面试题
C#如何允许一个类被继承但是避免这个类的方法被重载?
2015/02/24 面试题
精选干货:Java精选笔试题附答案
2014/01/18 面试题
高考寄语大全
2014/04/08 职场文书
抽样调查项目计划书
2014/04/24 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
甲午风云观后感
2015/06/02 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技