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 相关文章推荐
Python3处理文件中每个词的方法
May 22 Python
详解python使用Nginx和uWSGI来运行Python应用
Jan 09 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
将tensorflow的ckpt模型存储为npy的实例
Jul 09 Python
Python实现截取PDF文件中的几页代码实例
Mar 11 Python
python支付宝支付示例详解
Aug 22 Python
python科学计算之narray对象用法
Nov 25 Python
pycharm 更改创建文件默认路径的操作
Feb 15 Python
Python Numpy 控制台完全输出ndarray的实现
Feb 19 Python
解析Tensorflow之MNIST的使用
Jun 30 Python
BeautifulSoup中find和find_all的使用详解
Dec 07 Python
python如何将mat文件转为png
Jul 15 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
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
解析thinkphp的左右值无限分类
2013/06/20 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
可以支持多中格式的JS键盘
2007/05/02 Javascript
类之Prototype.js学习
2007/06/13 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
node.js中的fs.writeSync方法使用说明
2014/12/15 Javascript
jquery SweetAlert插件实现响应式提示框
2015/08/18 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
JavaScript事件 "事件对象"的注意要点
2016/01/14 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
python实现红包裂变算法
2016/02/16 Python
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
2019/04/29 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
罗马尼亚购物网站:Vivantis.ro
2019/07/20 全球购物
kfc实习自我鉴定
2013/12/14 职场文书
产品促销活动策划书
2014/01/15 职场文书
服务承诺书格式
2014/05/21 职场文书
企业金融服务方案
2014/06/03 职场文书
群教个人对照检查材料
2014/08/20 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
2014年法务工作总结
2014/12/11 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
新郎婚礼致辞
2015/07/27 职场文书
小组组名及励志口号
2015/12/24 职场文书