python-高阶函数(map,reduce,filter)
2021-04-26 16:29
标签:一个 turn lam from 定义 支持 合并 app print python-高阶函数(map,reduce,filter) 标签:一个 turn lam from 定义 支持 合并 app print 原文地址:https://www.cnblogs.com/Yangyl00/p/13252247.html1、map函数
array=[1,3,4,71,2]
ret=[]
for i in array:
ret.append(i**2)
print(ret)
#如果我们有一万个列表,那么你只能把上面的逻辑定义成函数
def map_test(array):
ret=[]
for i in array:
ret.append(i**2)
return ret
print(map_test(array))
#如果我们的需求变了,不是把列表中每个元素都平方,还有加1,减一,那么可以这样
def add_num(x):
return x+1
def map_test(func,array):
ret=[]
for i in array:
ret.append(func(i))
return ret
print(map_test(add_num,array))
#可以使用匿名函数
print(map_test(lambda x:x-1,array))
#上面就是map函数的功能,map得到的结果是可迭代对象
print(map(lambda x:x-1,range(5)))
2、reduce函数
from functools import reduce
#合并,得一个合并的结果
array_test=[1,2,3,4,5,6,7]
array=range(100)
#报错啊,res没有指定初始值
def reduce_test(func,array):
l=list(array)
for i in l:
res=func(res,i)
return res
# print(reduce_test(lambda x,y:x+y,array))
#可以从列表左边弹出第一个值
def reduce_test(func,array):
l=list(array)
res=l.pop(0)
for i in l:
res=func(res,i)
return res
print(reduce_test(lambda x,y:x+y,array))
#我们应该支持用户自己传入初始值
def reduce_test(func,array,init=None):
l=list(array)
if init is None:
res=l.pop(0)
else:
res=init
for i in l:
res=func(res,i)
return res
print(reduce_test(lambda x,y:x+y,array))
print(reduce_test(lambda x,y:x+y,array,50))
3、filter函数
#电影院聚集了一群看电影bb的傻逼,让我们找出他们
movie_people=[‘alex‘,‘wupeiqi‘,‘yuanhao‘,‘sb_alex‘,‘sb_wupeiqi‘,‘sb_yuanhao‘]
def tell_sb(x):
return x.startswith(‘sb‘)
def filter_test(func,array):
ret=[]
for i in array:
if func(i):
ret.append(i)
return ret
print(filter_test(tell_sb,movie_people))
#函数filter,返回可迭代对象
print(filter(lambda x:x.startswith(‘sb‘),movie_people))
4、总结
#当然了,map,filter,reduce,可以处理所有数据类型
name_dic=[
{‘name‘:‘alex‘,‘age‘:1000},
{‘name‘:‘wupeiqi‘,‘age‘:10000},
{‘name‘:‘yuanhao‘,‘age‘:9000},
{‘name‘:‘linhaifeng‘,‘age‘:18},
]
#利用filter过滤掉千年王八,万年龟,还有一个九千岁
def func(x):
age_list=[1000,10000,9000]
return x[‘age‘] not in age_list
res=filter(func,name_dic)
for i in res:
print(i)
res=filter(lambda x:x[‘age‘] == 18,name_dic)
for i in res:
print(i)
#reduce用来计算1到100的和
from functools import reduce
print(reduce(lambda x,y:x+y,range(100),100))
print(reduce(lambda x,y:x+y,range(1,101)))
#用map来处理字符串列表啊,把列表中所有人都变成sb,比方alex_sb
name=[‘alex‘,‘wupeiqi‘,‘yuanhao‘]
res=map(lambda x:x+‘_sb‘,name)
for i in res:
print(i)
上一篇:算法的时间空间转换
下一篇:Java基础--(三)运算符
文章标题:python-高阶函数(map,reduce,filter)
文章链接:http://soscw.com/index.php/essay/79855.html