码迷,mamicode.com
首页 > 编程语言 > 详细

python-高阶函数(map,reduce,filter)

时间:2020-07-05 22:50:47      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:一个   turn   lam   from   定义   支持   合并   app   print   

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

python-高阶函数(map,reduce,filter)

标签:一个   turn   lam   from   定义   支持   合并   app   print   

原文地址:https://www.cnblogs.com/Yangyl00/p/13252247.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!