map(func, seq)
对seq中的每一个元素,调用func并返回结果。典型的应用是使用lambda函数。
>>> def square(x): return x**2 >>> square = map(square,range(10)) >>> print(square) [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>>
>>> names = ['Anne', 'Amy', 'Bob', 'David', 'Carrie', 'Barbara', 'Zach'] >>> lengths = map(len,names) >>> print(lengths) [4, 3, 3, 5, 6, 7, 4] >>>
lambda
使用lambda关键创建匿名函数
>>> print((lambda x:x**2)(5)) 25 >>> print((lambda x,y: x*y)(3,4)) 12 >>> print((lambda x: x.startswith('B'))('Bob')) True >>> print((lambda x:x.startswith('B'))('Robert')) False >>> incr = lambda input:input+1 >>> print(incr(4)) 5 >>>
lambda和map一起使用
>>> squares = map(lambda x:x**2,range(10)) >>> print(squares) [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>>
filter(func or None, seq)
对seq中的每一个元素,调用func并返回那些使func为true的seq中的项。
也可以在filter()中使用lambda
>>> squares = map(lambda x:x**2,range(10)) >>> special_squares = filter(lambda x:x>5 and x<50,squares) >>> print(special_squares) [9, 16, 25, 36, 49] >>>
>>> names = ['Anne', 'Amy', 'Bob', 'David', 'Carrie', 'Barbara', 'Zach'] >>> b_names = filter(lambda s:s.startswith('B'),names) >>> print(b_names) ['Bob', 'Barbara'] >>>
reduce(func, seq)
对seq中的每一个元素,调用func并返回单个结果
如果seq = [ s1, s2, s3, ... , sn ],按照以下方式执行:
-先取出seq中的两个元素s1,s2调用func(s1,s2)
-将上一步的结果和seq中的下个元素一起调用func,相当于func(func(s1,s2),s3)
-按照上面的步骤继续调用下去
-最终返回单个值作为reduce()的返回值
>>> reduce(lambda x,y:x+y, [47,11,42,13]) 113 >>>
计算过程如下:
>>> f = lambda a,b:a if(a>b) else b >>> reduce(f,[47,11,42,102,13]) 102 >>> >>> reduce(lambda x,y:x+y,range(1,101)) 5050 >>>