Python list操作之-lamba函数与filter、map、reduce 函数
lambda 关键字在处理列表list时的作用。
lambda 在Python 表达式内创建匿名函数,在Python中限制了 lambda 函数的定义体,只能使用纯表达式。换句话说,lambda 函数的定义体中不能赋值,也不能使用 while 和 try等 Python 语句。
lambda匿名函数不应该单独使用,而是应该跟其他函数在一起配合使用,也不能有复杂的逻辑,就是一个明确的处理结果
lambda 匿名函数
lambda 函数的语法比较简单,形式为:lambda 参数列表: 表达式
sum = lambda x,y:x+y
sum(6,9)
filter 函数
功能: filter的功能是过滤掉序列中不符合函数条件的元素,当序列中要删减的元素可以用某些函数描述时,就应该想起filter函数。
调用: filter(function,sequence),function可以是匿名函数或者自定义函数,它会对后面的sequence序列的每个元素判定是否符合函数条件,返回True或者False,从而只留下True 的元素;sequence可以是列表、元组或者字符串。
例子:
x = [1,2,3,4,5]
list(filter(lambda x:x%2==0,x)) # 找出偶数。python3.之后filter函数返回的不再是列表而是迭代器,所以需要用list转换。*
输出:[2, 4]
map 函数
功能: 求一个序列或者多个序列进行函数映射之后的值,就该想到map这个函数,它是python自带的函数,在python3.之后返回的是迭代器,同filter,需要进行列表转换list()。*
调用: map(function,iterable1,iterable2),function中的参数值不一定是一个x,也可以是x和y,甚至多个;后面的iterable表示需要参与function运算中的参数值,有几个参数值就传入几个iterable。
例子:
x = [1,2,3,4,5]
y = [2,3,4,5,6]
list(map(lambda x,y:(x*y)+2,x,y))
输出:[4, 8, 14, 22, 32]
reduce 函数
功能: 对一个序列进行压缩运算,得到一个值。但是reduce在python2的时候是内置函数,到了python3移到了functools模块,所以使用之前需要 from functools import reduce
调用: reduce(function,iterable),其中function必须传入两个参数,iterable可以是列表或者元组
例子:
x=[1,2,3,4,5]
from functools import reduce
reduce(lambda x,y: x+y, x)
输出:15 (数列的累计运算,这里是累加)
简而言之,filter和map都是python内置的函数,可以直接调用,reduce在functools模块
用for...in...if 可代替lanmda,而且更易读
上面例子中的map的作用,非常简单清晰。但是,Python是否非要使用lambda才能做到这样的简洁程度呢?在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。
比如上面 filter的例子可以写成:
print([x for x in foo if x % 3 == 0])
map的例子,可以写成:
print([x * 2 + 10 for x in foo])
非常的简洁,易懂。同样也是比lambda的方式更容易理解。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。