[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 语句后面添加独立字符串,这样的注释被 ...
随机推荐
- elasticsearch5环境搭建
1.下载ElasticSearch https://www.elastic.co/cn/downloads/elasticsearch#ga-release 因为是windows版本,所以下载zip即 ...
- hdu 1443 Joseph【约瑟夫环】
题目 题意:一共有2k个人,分别为k个好人和k个坏人,现在我们需要每隔m个人把坏人挑出来,但是条件是最后一个坏人挑出来前不能有好人被挑出来..问最小的m是多少 约瑟夫环问题,通常解决这类问题时我们把编 ...
- iOS 项目国际化(多语言支持)
按下图步骤创建好后使用如下代码即可实现国际化:self.infoLB.text = NSLocalizedString("key", comment: "") ...
- @requestParamore与@pathvariable的区别
http://localhost:8080/Springmvc/user/page.do?pageSize=3&pageNow=2 你可以把这地址分开理解,其中问号前半部分:http://lo ...
- CentOS7下启用网卡
[root@localhost network-scripts]# ls ifcfg-ens99 ifdown-ippp ifdown-sit ifup-bnep ifup-plip ifup-Tea ...
- Aspose.Words 将word2中的内容插入到word1中的指定位置
将word2中的内容插入到word1中的指定位置(经测试可用) 在官网找到的例子,记录一下: public static void InsertDocumentAtBookmark(string da ...
- 数据导出之winfrom导出word(二)
本篇文章介绍了根据word模板导出word文档的方法. 一.获取模板地址 WordDocFileHelper WordTem = new WordDocFileHelper(); string pat ...
- 创建窗口句柄时出错(error creating window handle)
创建窗口句柄错误.这个错误非常头疼,难以排查,我从网络上搜集了一些排查方案. 可能的原因: 窗口句柄泄露,句柄数超过1W. 用户对象超过1W,错误提示"当前程序已使用了 Window 管理器 ...
- 读取型CSRF-需要交互的内容劫持
本文作者:i春秋作家——jing0102 前言 最近在挖洞,"实践出真知"这句话说的很对,在实际挖掘过程中我会思考很多东西,跟朋友一起准备做一份手册,忽然的想到了一些漏洞的定义和规 ...
- 网页关闭(解决window.close在火狐下不兼容问题)
熟悉前端的都知道,火狐默认状态非window.open的页面window.close是无效的 网上有很多人说,在火狐的地址栏输入:about:config然后找到dom.allow_scripts_t ...