python中的map、filter、reduce函数

时间:2022-01-03 02:43:41

 

 

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))