lambda表达式和 map,reduce,filter

map

map(function, sequence[, sequence, ...]) -> list

第一个参数传函数,需要对sequence做什么操作
第二个参数为序列(元组,列表等),可以传入多个,逗号隔开
返回list

单参数

>>>def fun(x):
...     return x+1
...
>>>list(map(fun,[1,2,3]))
>>>[2,3,4]

多参数

>>>def fun(x,y):
...     return x*y
...
>>>list(map(fun,[1,2,3],[1,2,3]))
>>>[1,4,9]

fun函数可转换为lambda函数:
lambda x,y: x*y

filter

filter(function or None, sequence) -> list, tuple, or string

对sequence中的item依次执行function(item),将执行结果为True(!=0)的item组成一个List/String/Tuple(取决于sequence的类型)返回,False则退出(0),进行过滤。
python >>> def div(n):return n%2 ... >>> filter(div,range(5)) #返回div输出的不等于0的真值 [1, 3] >>> filter(div,range(10)) [1, 3, 5, 7, 9] >>> filter(lambda x : x%2,range(10)) #lambda 函数返回奇数,返回列表 [1, 3, 5, 7, 9] >>> filter(lambda x : not x%2,range(10)) [0, 2, 4, 6, 8] >>> def fin(n):return n!='z' #过滤'z' 函数,出现z则返回False ... >>> filter(fin,'zhoujy') #'z'被过滤 'houjy' >>> filter(lambda x : x !='z','zhoujy') #labmda返回True值 'houjy' >>> filter(lambda x : not x=='z','zhoujy') #返回:字符串 'houjy'

reduce

reduce(function, sequence[, initial]) -> value

对sequence中的item顺序迭代调用function,函数必须要有2个参数。要是有第3个参数,则表示初始值,可以继续调用初始值,返回一个值。

>>> def add(x,y):return x+y
... 
>>> reduce(add,range(10))        #1+2+3+...+9
45
>>> reduce(add,range(11))        #1+2+3+...+10
55
>>> reduce(lambda x,y:x*y,range(1,3),5)           #lambda 函数,5是初始值, 1*2*5
10
>>> reduce(lambda x,y:x*y,range(1,6))             #阶乘,1*2*3*4*5
120
>>> reduce(lambda x,y:x*y,range(1,6),3)           #初始值3,结果再*3
360
>>> reduce(lambda x,y:x+y,[1,2,3,4,5,6])          #1+2+3+4+5+6
21

猜你喜欢

转载自www.cnblogs.com/tastepy/p/9054628.html