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

Posted yangyl00

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-高阶函数(map,reduce,filter)相关的知识,希望对你有一定的参考价值。

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)的主要内容,如果未能解决你的问题,请参考以下文章

Python 学习笔记 -- 内嵌函数闭包匿名函数高阶函数map高阶函数filter高阶函数reduce

Python学习之高阶函数——map/reduce

Python 高阶函数 -- map/reduce

Python 高阶函数map(),filter(),reduce()

Python之高阶函数map/reduce

[py][lc]python高阶函数(匿名/map/reduce/sorted)