[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 语句后面添加独立字符串,这样的注释被 ...
随机推荐
- Linux常用备份恢复工具
在 Linux 中可以通过各种各样的方法来执行备份.所涉及的技术从非常简单的脚本驱动的方法,到精心设计的商业化软件.备份可以保存到远程网络设备.磁带驱动器和其他可移动媒体上.备份可以是基于文件的或基于 ...
- 界面及Activity参数设置
去标题栏(在onCreate中) requestWindowFeature(Window.FEATURE_NO_TITLE); 设置全屏(在onCreate中) getWindow().setFlag ...
- ESP-IDF3.0
发行版v3.0的文档可在http://esp-idf.readthedocs.io/en/v3.0/上找到. 这是自发布v3.0-rc1以来的更改列表. 如果从以前的稳定版本V2.1进行升级,请检查v ...
- poj 3258 3273
poj3258 题目 (最大化最小值)(最小值最大化) 题意:牛要到河对岸,在与河岸垂直的一条线上,河中有N块石头,给定河岸宽度L,以及每一块石头离牛所在河岸的距离,现在去掉M块石头,要求去掉M块石 ...
- LDAP常用属性及其描述
属性 全名 描述 dn distinguished name 唯一标识名,类似于绝对路径,每个对象都有唯一标识名. 例如:uid=tester,ou=People,dc=example,dc=com ...
- WINDOWS CLUSTER -- 时间不同步导致的群集问题
故障描述,重启服务器后,发现该重启节点未成功加入到Windows群集中,导致该节点上的Alwayson服务也受影响处于“正在解析”状态,尝试重启cluster服务,发现无效,查看windows日志,发 ...
- 针对 easyui boolean 布尔值 的处理
1.html代码 <select class="easyui-combobox" data-options="editable:false,panelHeight: ...
- UWP 2018 新版 NavigationView 尝鲜
本文参考了官方文档以及提供的示例代码(官方代码貌似有点误导,所以写了这一篇,并且文末有GayHub代码地址) 官方文档发布于20180806,说明NavigationView刚发布了没几天,还在开发中 ...
- 全球第一开源ERP Odoo操作手册 数据库简介
1.3 数据库简介 每一个独立核算的企业都有一套相互关联的账簿体系, 把这一套完整的账簿体系建立在计算机系统中就称为一个数据库. 一般一个企业只用一个数据库. 如果企业有几个下属的独立核算的实体,也可 ...
- HDU4825 Xor Sum (01Trie)
Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeu ...