python-map, reduce, filter, lambda
tips:以下使用到的迭代器,可迭代对象,生成器等概念可以参见我的另一篇博客
lambda表达式
主要用于一行写完简单函数,简单方便,但不能使用全局变量,也不是代码块。
>>> lambda x:x+1 # 对冒号前面的x,处理为x+1并返回
>>> lambda *args: sum(args) # 对输入的多个参数求和,要求参数能做加法运算
>>> lambda **kwargs: 0 # 输入任意的键值对参数,返回0
>>> a = lambda x:x + x
>>> a(2)
4
lambda表达式经常配合map,reduce,filter这些函数使用,所以下面介绍这些函数,并结合应用。
reduce()函数
reduce(function, sequence[, initial]) -> value
tips: python3中已经放到了functools模块里面,想要使用的话需要先导入。
- reduce的第一个参数必须是一个函数,且该函数必须接收两个参数,每次计算的结果返回给function函数的第一个参数,第二个参数依次从可迭代对象中取,见下方例子理解;
- reduce的第二个参数是一个可迭代对象;
- reduce的第三个参数是初始值,没有该参数则直接使用可迭代对象的第一个值。
>>> from functools import reduce
>>> reduce(lambda x,y:x+y, range(1,6))
15 # 相当于((((1+2)+3)+4)+5)
>>> reduce(lambda x,y:x+y*2, 'qwqwqw')
'qwwqqwwqqww'
>>> reduce(lambda x,y:x+y, range(1,6), 6)
21 # 相当于(((((6+1)+2)+3)+4)+5)
>>> reduce(lambda x:x+1, range(6))
TypeError: <lambda>() takes 1 positional argument but 2 were given
# 这里及下面的的lambda表达式都可以换成其他更复杂的函数
map()函数
map(func, *iterables) --> map object
一个非常好用的内建函数,将可迭代对象的每一个值依次传入func函数中进行处理,并返回一个map对象(迭代器,可以使用next()依次获取其中的值,也可以使用list进行转换。python2中返回的是一个列表)
>>> list(map(lambda x:x+x, 'qwqw')) # 为了方便观察,使用了list函数,将map对象直接转换成列表
['qq', 'ww', 'qq', 'ww']
>>> QAQ = map(lambda x,y:x+y*2, 'qw', 'AS')
>>> next(QAQ)
'qAA'
>>> list(map(lambda x,y:x+y*2, 'q', 'AS'))
['qAA'] # 第一个参数从第一个可迭代对象取值,第二个从第二个可迭代对象取值,不够则只完成最小满足规模
>>> list(map(lambda x,y,z:x+y+z, 'q', 'AS', ''))
[]
filter()函数
filter(function or None, iterable) --> filter object
正如其名——过滤:将可迭代对象的的每个值传递给function进行处理,将满足条件的值返回到一个迭代器中。如果没有function函数,则判断可迭代对象中每个是'真'的值,见下方实验
>>> list(filter(lambda x:x>2, range(5)))
[3, 4]
>>> list(filter(lambda x: x != '', [1,'q', 2,'']))
[1, 'q', 2]
>>> list(filter(None,[-2.1, -1, 0, 1, 2]))
[-2.1, -1, 1, 2] # python中除0外都是‘真’
python-map, reduce, filter, lambda的更多相关文章
- Python-函数式编程-map reduce filter lambda 三元表达式 闭包
lambda 匿名函数,核心是作为算子,处理逻辑只有一行但具有函数的特性,核心用于函数式编程中 三元运算符 其实本质上是if分支的简化版,满足条件返回 if 前面的值,不满足条件返回 else后面的值 ...
- python map, reduce,filter 使用
参考python built-on function: http://docs.python.org/2.7/library/functions.html?highlight=map%20reduce ...
- map/reduce/filter/lambda
Python内建了map()/reduce()/filter()函数. map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的It ...
- Python map/reduce/filter/sorted函数以及匿名函数
1. map() 函数的功能: map(f, [x1,x2,x3]) = [f(x1), f(x2), f(x3)] def f(x): return x*x a = map(f, [1, 2, 3, ...
- Python map,reduce,filter,apply
map(function, iterable, ...) map()函数接收两个参数,一个是函数,一个是可迭代的对象,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 基本等 ...
- Python学习:函数式编程(lambda, map() ,reduce() ,filter())
1. lambda: Python 支持用lambda对简单的功能定义“行内函数” 2.map() : 3.reduce() : 4.filter() : map() ,reduce() , filt ...
- python 函数式编程之lambda( ), map( ), reduce( ), filter( )
lambda( ), map( ), reduce( ), filter( ) 1. lambda( )主要用于“行内函数”: f = lambda x : x + 2 #定义函数f(x)=x+2 g ...
- python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))
1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...
- Demo of Python "Map Reduce Filter"
Here I share with you a demo for python map, reduce and filter functional programming thatowned by m ...
- [python基础知识]python内置函数map/reduce/filter
python内置函数map/reduce/filter 这三个函数用的顺手了,很cool. filter()函数:filter函数相当于过滤,调用一个bool_func(只返回bool类型数据的方法) ...
随机推荐
- js尾巴
js中根据id获取标签: /** * 根据id获取标签 * @param {string}id * @returns {object} */ function $(id) { return typeo ...
- ArcMap中用python的split方法提取字段的值
提取PROPERTY_L字段空格分隔符前面的地址编号 提取前:5105 ABERDEEN LANE 提取后:5105 提取的表达式:!PROPERTY_L!.split(" ")[ ...
- Python装饰器高级用法
在Python中,装饰器一般用来修饰函数,实现公共功能,达到代码复用的目的.在函数定义前加上@xxxx,然后函数就注入了某些行为,很神奇!然而,这只是语法糖而已. 场景 假设,有一些工作函数,用来对数 ...
- win10 切换网卡的bat
@echo off >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system3 ...
- 虚拟机系统ubuntu12.04(内网环境下的虚拟主机)开启远程连接访问
一.工具准备: 1.内网虚拟机Ubuntu12.04系统主机一台,开放端口为:29999 2.远程连接软件:mobaxterm 二.开启步骤: 1.查看端口状态信息: netstat -antl | ...
- MVC三层架构的分层开发思想
- 使用docker-compose运行微服务项目#eureka+config+auth+gateway+module
微服务架构中我们使用了必须的四个组件,eureka config gateway auth 其中config依赖eureka,auth依赖前两者,gateway又依赖auth 这样就确定了四个组件的启 ...
- C语言/C++编程学习:栈的代码实现之数组方案
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- 重学Veriliog(2)——高级编程语句
1.判断 1.1 if ... else ... 有优先级 在组合逻辑电路中,需要避免产生Latch(避免结构不完整) Latch容易引起竞争冒险,同时静态时序分析工具也不好分析穿过Latch的路径? ...
- SpringBoot 启动报The Java Virtual Machine has not been configured to use the desired default character encoding (UTF-8)
解决方法: 启动的时候在VM中添加 Dfile.encoding=UTF-8 就好了!