python中reduce filter map lambda函数
lambda函数
python 使用 lambda 来创建匿名函数,lambda返回值是一个函数的地址,也就是函数对象。
语法:lambda [arg1 [,arg2,.....argn]]:expression
- lambda只是一个表达式,函数体比def简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率
参考:https://www.runoob.com/python/python-functions.html
从函数命名的角度:匿名,直接返回可供调用的值
从输入输出的角度:支持多个输入参数,但只支持一个表达式
从函数功能的角度:结构简单,无须定义函数名。但所能实现的功能也极其受限。
从访问变量的角度:只支持访问lambda自己定义的变量。不支持外部变量访问
从运行效率的角度:lambda实际上仍开辟了一个内存单元,并没有提升运行效率
filter函数
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
语法:filter(function, iterable) # function为判断函数的名字(不带小括号和参数的)(也可以用匿名函数lambda),iterable为可迭代对象
注意: Pyhton2.x 返回列表,Python3.x 返回迭代器对象(转化成列表要用list())
参考:https://www.runoob.com/python/python-func-filter.html
map函数
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
语法:map(function,iterable, ...)
注意: Pyhton2.x 返回列表,Python3.x 返回迭代器对象(转化成列表要用list())
参考:https://www.runoob.com/python/python-func-map.html
reduce函数
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
语法:reduce(function,iterable[,initializer]) # iniializer为可选项,表示初始参数
参考:https://www.runoob.com/python/python-func-reduce.html
lambda函数常跟filter、map、sorted、reduce结合使用
- filter函数。此时lambda函数用于指定过滤列表元素的条件。
如filter(lambda x: x % 3 == 0, [1, 2, 3])指定将列表[1,2,3]中能够被3整除的元素过滤出来,其结果是[3]。
- sorted函数。此时lambda函数用于指定对列表中所有元素进行排序的准则。
如sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))将列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素与5距离从小到大进行排序,其结果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。
- map函数。此时lambda函数用于指定对列表中每一个元素的共同操作。
例如map(lambda x: x+1, [1, 2,3])将列表[1, 2, 3]中的元素分别加1,其结果[2, 3, 4]。
- reduce函数。此时lambda函数用于指定列表中两两相邻元素的结合条件。
例如reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])将列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素从左往右两两以逗号分隔的字符的形式依次结合起来,其结果是'1, 2, 3, 4, 5, 6, 7, 8, 9'。
参考:https://blog.csdn.net/zhanshen112/article/details/90603865