Python中的特殊语法:filter、map、reduce、lambda介绍


Posted in Python onApril 14, 2015

filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回:

>>> def f(x): return x % 2 != 0 and x % 3 != 0 

>>> filter(f, range(2, 25)) 

[5, 7, 11, 13, 17, 19, 23]

>>> def f(x): return x != 'a' 

>>> filter(f, "abcdef") 

'bcdef'

map(function, sequence) :对sequence中的item依次执行function(item),见执行结果组成一个List返回:

>>> def cube(x): return x*x*x 

>>> map(cube, range(1, 11)) 

[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

>>> def cube(x) : return x + x 

... 

>>> map(cube , "abcde") 

['aa', 'bb', 'cc', 'dd', 'ee']

另外map也支持多个sequence,这就要求function也支持相应数量的参数输入:
>>> def add(x, y): return x+y 

>>> map(add, range(8), range(8)) 

[0, 2, 4, 6, 8, 10, 12, 14]

reduce(function, sequence, starting_value):对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用,例如可以用来对List求和:

>>> def add(x,y): return x + y 

>>> reduce(add, range(1, 11)) 

55 (注:1+2+3+4+5+6+7+8+9+10)

>>> reduce(add, range(1, 11), 20) 

75 (注:1+2+3+4+5+6+7+8+9+10+20)

lambda:这是Python支持一种有趣的语法,它允许你快速定义单行的最小函数,类似与C语言中的宏,这些叫做lambda的函数,是从LISP借用来的,可以用在任何需要函数的地方:

>>> g = lambda x: x * 2 

>>> g(3) 

6 

>>> (lambda x: x * 2)(3) 

6

我们也可以把filter map reduce 和lambda结合起来用,函数就可以简单的写成一行。
例如:

kmpathes = filter(lambda kmpath: kmpath,                  

map(lambda kmpath: string.strip(kmpath),

string.split(l, ':')))    

看起来麻烦,其实就像用语言来描述问题一样,非常优雅。
对 l 中的所有元素以':'做分割,得出一个列表。对这个列表的每一个元素做字符串strip,形成一个列表。对这个列表的每一个元素做直接返回操作(这个地方可以加上过滤条件限制),最终获得一个字符串被':'分割的列表,列表中的每一个字符串都做了strip,并可以对特殊字符串过滤。

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

lambda表达式返回一个函数对象
例子:

func = lambda x,y:x+y

func相当于下面这个函数

def func(x,y):

    return x+y

注意def是语句而lambda是表达式
下面这种情况下就只能用lambda而不能用def
[(lambda x:x*x)(x) for x in range(1,11)]

map,reduce,filter中的function都可以用lambda表达式来生成!
 
map(function,sequence)
把sequence中的值当参数逐个传给function,返回一个包含函数执行结果的list。
如果function有两个参数,即map(function,sequence1,sequence2)。
 
例子:
求1*1,2*2,3*3,4*4

map(lambda x:x*x,range(1,5))

返回值是[1,4,9,16]
 
reduce(function,sequence)

function接收的参数个数只能为2
先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给
function,然后只返回一个结果。
 
例子:
求1到10的累加

reduce(lambda x,y:x+y,range(1,11))

返回值是55。
 
filter(function,sequence)

function的返回值只能是True或False
把sequence中的值逐个当参数传给function,如果function(x)的返回值是True,就把x加到filter的返回值里面。一般来说filter的返回值是list,特殊情况如sequence是string或tuple,则返回值按照sequence的类型。
 
例子:
找出1到10之间的奇数

filter(lambda x:x%2!=0,range(1,11))

返回值
[1,3,5,7,9]

 
如果sequence是一个string
filter(lambda x:len(x)!=0,'hello')返回'hello'

filter(lambda x:len(x)==0,'hello')返回''
Python 相关文章推荐
python实现rest请求api示例
Apr 22 Python
python获得文件创建时间和修改时间的方法
Jun 30 Python
在Django中输出matplotlib生成的图片方法
May 24 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
Aug 05 Python
python实现身份证实名认证的方法实例
Nov 08 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
keras的siamese(孪生网络)实现案例
Jun 12 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
python3处理word文档实例分析
Dec 01 Python
如何用Django处理gzip数据流
Jan 29 Python
python绘制高斯曲线
Feb 19 Python
详解Python中for循环的使用
Apr 14 #Python
Python中join和split用法实例
Apr 14 #Python
Python中__name__的使用实例
Apr 14 #Python
Python中的列表知识点汇总
Apr 14 #Python
Python中使用copy模块实现列表(list)拷贝
Apr 14 #Python
复习Python中的字符串知识点
Apr 14 #Python
Python内置函数dir详解
Apr 14 #Python
You might like
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
php header Content-Type类型小结
2011/07/03 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
JQuery与iframe交互实现代码
2009/12/24 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
JavaScript hasOwnProperty() 函数实例详解
2017/08/04 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
微信小程序swiper左右扩展各显示一半代码实例
2019/12/05 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
python多线程http下载实现示例
2013/12/30 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
Python通过Pillow实现图片对比
2020/04/29 Python
python 如何实现遗传算法
2020/09/22 Python
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
英国健身超市:Fitness Superstore
2019/06/17 全球购物
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
实验教师岗位职责
2014/02/13 职场文书
安全演讲稿大全
2014/05/09 职场文书
农村文化活动总结
2014/08/28 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
python自然语言处理之字典树知识总结
2021/04/25 Python
Python各协议下socket黏包问题原理
2022/04/12 Python