map,filter和reduce函数搭配lambda笔记

时间:2022-03-22 18:43:19

  map() 会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

# map函数相当于map_test函数的演变
num1=[1,2,12,23,34,45]
def map_test(func,arrary): #func=lambda x:x+1    arrary=[1,2,12,23,34,45]
    ret=[]
    for i in arrary:
        res = func(i)
        ret.append(res)
    return  ret
print(list(map_test(lambda x:x+1 ,num1))) #lambda匿名函数,lambda x:x+1等价于y=x+1,其中x是自变量x,x+1是因变量y
# 调用默认map函数可以省事很多
res=map(lambda x:x+1,num1)
print('内置函数map处理的结果',list(res))

结果

[2, 3, 13, 24, 35, 46]
内置函数map,处理结果 [2, 3, 13, 24, 35, 46]

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

#filter函数的演变
movie_people=['baiyuechu_sb','honghong_sb','luolan','pingqiuyuechu_sb']

def filter_test(func,array):
    ret=[]  #定义一个空列表
    for p in array:
        if not func(p):
               ret.append(p)
    return ret

res=filter_test(lambda n:n.endswith('sb'),movie_people)
print(res)

#filter函数
movie_people=['baiyuechu_sb','honghong_sb','luolan','pingqiuyuechu_sb']
print(list(filter(lambda n:not n.endswith('sb'),movie_people)))

结果

['luolan']
['luolan']

reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

#reduce函数的演变
num_l=[1,2,3,100]
def reduce_test(func,array,init=None): #inti代表初始值具体名称如reduce(function, iterable[, initializer])
    if init is None:
        res=array.pop(0) #pop(0)取第一个数
    else:
        res=init
    for num in array:
        res=func(res,num)
    return res

print(reduce_test(lambda x,y:x*y,num_l,100))


#reduce函数
from functools import reduce
num_l=[1,2,3,100]
print(reduce(lambda x,y:x+y,num_l,1))
print(reduce(lambda x,y:x+y,num_l))

结果

60000
107
106