[Python学习笔记-002] lambda, map, filter and reduce
1. lambda
lambda, 即匿名函数,可以理解为跟C语言的宏类似。例如:
>>> max = lambda x, y: x if x > y else y
>>> max(2, 3)
3
而用C语言实现对应的宏就是:
#define max(x, y) ((x) > (y) ? (x) : (y))
注意:
- lambda的主体必须是单个表达式,而不是一些语句
>>> print2 = lambda x: sys.stderr.write(str(x) + '\n') # <--- YES
>>> print2('Oops')
Oops
5
>>> print2 = lambda x: print(str(x)) # <--- NO (because print() uses lambda actually)
>>> print2('Oops')
Oops
>>>
- 为了可读性,不要使用嵌套的lambda。例如:
>>> ((lambda x: (lambda y: x + y ** 2))(99))(3) # <--- BAD style
108
>>>
2. map
程序对列表(list)和其他序列常常要做的一件事就是对每一个元素进行一个操作并把结果集合起来。例如:
>>> l1 = [1, 3, 5, 7, 9]
>>> l2 = []
>>> for i in l:
... j = i ** 2
... l2.append(j)
...
>>> l2
[1, 9, 25, 49]
>>>
这时,Python提供的内置函数map()就派上用场了。map()函数会对一个序列对象中的每一个元素应用被传入的函数,并且返回一个包含了所有函数调用结果的一个列表。例如:
>>> l1 = [1, 3, 5, 7, 9]
>>> l2 = list(map(lambda x: x ** 2, l1))
>>> l2
[1, 9, 25, 49, 81]
>>>
map()还支持操作多个序列,例如:
>>> l1 = [1, 2, 3]
>>> l2 = [4, 5, 6]
>>> def xadd(a, b):
... return (a + b) ** 2
...
>>> xadd(1, 4)
25
>>> xadd(2, 5)
49
>>> xadd(3, 6)
81
>>> l3 = list(map(xadd, l1, l2))
>>> l3
[25, 49, 81]
>>>
>>> l1 = [0x1, 0x3, 0x5, 0x7, 0x9]
>>> l2 = [0x2, 0x4, 0x6, 0x8, 0xa]
>>> l3 = [0x5, 0x4, 0x3, 0x2, 0x1]
>>> l4 = list(map(lambda x, y, z: x + z - y, l1, l2, l3))
>>> l4
[4, 3, 2, 1, 0]
>>>
3. filter
函数filter(func, list)对list的每一个元素都执行函数func(), 若结果为真,则保存那个元素。例如:
>>> def is_odd(n):
... if n % 2 == 1:
... return True
... else:
... return False
...
>>> l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l2 = list(filter(is_odd, l1))
>>> l2
[1, 3, 5, 7, 9]
>>>
4. reduce
list = [x1, x2, x3, ...], reduce(func, list)表示把函数func()作用在list上,函数func()必须接收两个参数,reduce把结果继续和list的下一个元素做累积计算,其效果就是:
reduce(func, [x1, x2, x3]) = func(func(x1, x2), x3)
例如:
>>> l = [47, 11, 42, 13]
>>> n = reduce(lambda x, y: x + y, l)
>>> n
113
>>>
上面的例子用图表示为:
注意: 在Python3中,reduce()不再是一个内置函数,而是被放到了模块functools中。
$ python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
...<snip>...
>>> import functools
>>> l = [47, 11, 42, 13]
>>> n = functools.reduce(lambda x, y: x + y, l)
>>> n
113
参考资料:
[Python学习笔记-002] lambda, map, filter and reduce的更多相关文章
- Python学习笔记:lambda表达式
lambda表达式:通常是在需要一个函数,但又不想去命名一个函数的时候使用,即匿名函数. 示例如下: add = lambda x,y : x+ y add(1,2) # 结果为3 1.应用在函数式编 ...
- Python学习笔记002
字符编码:把二进制字符翻译成字符 ASCII码表 256 一个字节,8个比特 支持中文: GB2312 GBK1.0 GB18030 BIG5(台湾) unicode UTF-8 开头定义 ...
- python的高阶函数(map,filter,sorted,reduce)
高阶函数 关注公众号"轻松学编程"了解更多. 1.MapReduce MapReduce主要应用于分布式中. 大数据实际上是在15年下半年开始火起来的. 分布式思想:将一个连续的字 ...
- Python学习笔记—Python基础1 介绍、发展史、安装、基本语法
第一周学习笔记: 一.Python介绍 1.Python的创始人为吉多·范罗苏姆.1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...
- Python学习笔记之基础篇(-)python介绍与安装
Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...
- Python学习笔记之map、zip和filter函数
这篇文章主要介绍 Python 中几个常用的内置函数,用好这几个函数可以让自己的代码更加 Pythonnic 哦 1.map map() 将函数 func 作用于序列 seq 的每一个元素,并返回处理 ...
- Python学习笔记010——匿名函数lambda
1 语法 my_lambda = lambda arg1, arg2 : arg1 + arg2 + 1 arg1.arg2:参数 arg1 + arg2 + 1 :表达式 2 描述 匿名函数不需要r ...
- Python学习笔记(八)
Python学习笔记(八): 复习回顾 递归函数 内置函数 1. 复习回顾 1. 深浅拷贝 2. 集合 应用: 去重 关系操作:交集,并集,差集,对称差集 操作: 定义 s1 = set('alvin ...
- Python学习笔记之函数
这篇文章介绍有关 Python 函数中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中函数的使用技巧 1.函数文档 给函数添加注释,可以在 def 语句后面添加独立字符串,这样的注释被 ...
随机推荐
- BUG 图片元素img下 高度超出 出现多余空白
BUG 图片元素img下 高度超出 出现多余空白 1.将图片转换为块级对象 即,设置img为“display:block;”. 2.设置图片的垂直对齐方式 即设置图片的vertical-align ...
- 20155326《Java程序设计》实验一实验报告
实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版) ...
- 从MS Word到Windows Live Writer
在做笔记的时候,喜欢使用Word进行排版及插入图片,但是当将笔记发布的时候,一般的网站是不支持直接将Word中的图片进行上传的,此时使用Windows Live Writer是一个不错的选择. 可是, ...
- hdu 1541
因为y的输入是从小到大,所以不用考虑y坐标的问题 只考虑x坐标就行 还有个小细节就是0<=x,y,<=32000 x和y取0的时候树状数组处理不到 x++就行了 #include < ...
- AngularJS 指令中的 replace:true
默认值是fasle,模板会被当作子元素插入到调用此指令的元素内部. <my-directive></my-directive> myModule.directive(" ...
- linux 查看、关闭 ssh pts/n登录的用户
1.查看登录用户: [root@TiaoBan- bin]# w :: up days, :, users, load average: 1.90, 1.75, 1.84 USER TTY FROM ...
- 还原wubutu系统
虚拟机->快照 进行系统还原备份
- DevExpress GridControl 关于使用CardView的一点小结
最近项目里需要显示商品的一系列图片,打算用CardView来显示,由于第一次使用,遇到许多问题,发现网上这方面的资源很少,所以把自己的一点点实际经验小结一下,供自己和大家以后参考. 1.选择CardV ...
- Django:model中的ForeignKey理解
有两个数据模型栏目模型和文章模型ArticleColumn和ArticlePost ArticleColumn: class ArticleColumn(models.Model): # 用户与栏目是 ...
- VS2015ASP.NET MVC5项目中Spring.NET配置方法(超详细)
首先,在ASP.NET MVC5项目右键,如下图所示,选择“管理Nuget程序包...” 然后,在弹出的页面的搜索框中输入“spring.web”,在返回结果中选择Spring.Web和Spring. ...