python中的map、filter、reduce函数
map:处理序列中的每个元素,得到的结果是一个'列表',该列表元素个数及位置与原来一样
map(func, array)
map:函数
num_l = [1,2,5,8,7,11,22,55]
def map_test(func, array):
ret = []
for i in num_l:
res = func(i)
ret.append(res)
return ret
# 默认func=lambda x:x+1 ,array=num_1
print(map_test(lambda x:x+1, num_l))
"""这里的map相当于map_test方法
map(方法,可迭代对象)这个可迭代对象可以是列表也可以是其他的
"""
res = map(lambda x:x+1, num_l)
print('内置函数map,处理结果:', res)
print(list(res))
filter:遍历序列中的每个元素,判断每个元素得到的布尔值,如果是true则留下
filter(func, array)
例如:people=[
{'name':'alex', 'age': 1000},
{'name':wupeiqi', 'age': 1000},
{'name':'yuanhao', 'age': 9000},
{'name':'linhaifeng', 'age': 18}
]
print(list(filter(lambda p:p['age']<=18, people)))
reduce :处理一个序列,然后把序列进行合并操作
reduce(func, array, init) init是初始值
例如:
from functools import reduce
num_l = [1, 2, 3, 100]
print(reduce(lambda x, y: x*y, num_l,100))
# 相当于
# init 是在定义初始值
def reduce_test(func,array,init=None):
if init is None:
res = array.pop(0) # 把列表的第一个值拿出来
else:
res = init
for num in array:
res = func(res, num)
return res
# 初始值为5,就是 5*1*2*3*100=30000
print(reduce_test(lambda x,y:x*y, num_l,5))
print(reduce_test(lambda x,y:x*y, num_l))