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多线程爬虫简单示例
Mar 04 Python
Python操作MongoDB详解及实例
May 18 Python
python 简单的绘图工具turtle使用详解
Jun 21 Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 Python
Python字典,函数,全局变量代码解析
Dec 18 Python
Python 从相对路径下import的方法
Dec 04 Python
python之线程通过信号pyqtSignal刷新ui的方法
Jan 11 Python
Python Pandas实现数据分组求平均值并填充nan的示例
Jul 04 Python
pytorch实现onehot编码转为普通label标签
Jan 02 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
Python AutoCAD 系统设置的实现方法
Apr 01 Python
Pytest之测试命名规则的使用
Apr 16 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
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
2013/06/06 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
2014/10/01 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
jQuery toggle()设置CSS样式
2009/11/05 Javascript
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
2015/11/25 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
vue后台管理之动态加载路由的方法
2018/08/13 Javascript
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
Python网络爬虫之爬取微博热搜
2019/04/18 Python
使用Python轻松完成垃圾分类(基于图像识别)
2019/07/09 Python
python3.5 cv2 获取视频特定帧生成jpg图片
2019/08/28 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
全球知名旅游社区巴西站点:TripAdvisor巴西
2016/07/21 全球购物
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
美国轮胎网站:Priority Tire
2018/11/28 全球购物
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
小区停车场管理制度
2014/01/27 职场文书
供货协议书范本
2014/04/22 职场文书
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android