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使用pygame模块编写俄罗斯方块游戏的代码实例
Dec 08 Python
python处理Excel xlrd的简单使用
Sep 12 Python
matplotlib简介,安装和简单实例代码
Dec 26 Python
python中requests和https使用简单示例
Jan 18 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
Feb 22 Python
浅谈keras的深度模型训练过程及结果记录方式
Jan 24 Python
Python warning警告出现的原因及忽略方法
Jan 31 Python
Django User 模块之 AbstractUser 扩展详解
Mar 11 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
Jun 18 Python
MATLAB数学建模之画图汇总
Jul 16 Python
django如何自定义manage.py管理命令
Apr 27 Python
pandas求平均数和中位数的方法实例
Aug 04 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
用文本作数据处理
2006/10/09 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
利用jquery写的左右轮播图特效
2014/02/12 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
jQuery实现“扫码阅读”功能
2015/01/21 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
JavaScript 中使用 Generator的方法
2017/12/29 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
jquery添加div实现消息聊天框
2020/02/08 jQuery
js函数和this用法实例分析
2020/03/13 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
2021/01/12 Vue.js
python实现马耳可夫链算法实例分析
2015/05/20 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
Python将图片转换为字符画的方法
2020/06/16 Python
《与孩子一起学编程》python自测题
2018/05/27 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
就业自我评价
2014/02/04 职场文书
《乌塔》教学反思
2014/02/17 职场文书
2014年教师业务学习材料
2014/05/12 职场文书
教师敬业奉献模范事迹材料
2014/05/18 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
解除施工合同协议书
2014/10/17 职场文书
2015年南京大屠杀纪念日活动总结
2015/03/24 职场文书
高一英语教学反思
2016/03/03 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang
Elasticsearch 基本查询和组合查询
2022/04/19 Python