filter,map和reduce函数

'''
匿名函数:
    定义一个匿名函数:
        lambda 形参列表 : 函数处理逻辑(返回值)
    匿名函数通常与其他函数结合使用
    当需要返回多个返回值时,需要将所有返回值组成元组,列表或者字符串的形式返回
'''
'''
def calc(x):
    return x+1

如上所示定义了一个简单的传入参数值加一的函数,
我们可以通过匿名函数一句来实现这个函数
等效于:
    lambda x : x+1
'''
# lambda x,y:(x+1,y+1)
# s=lambda x,y:'x+1,y+1'#  x+1,y+1
# print(s(2,5))
#
'''
需求:将所有数据中不符合要求的项去除,留下符合要求的选项
一、垃圾版
'''
# filtrate_l=['miku_v','rin_v','ran_v','ruka_v','misaka_a','yuu_a']
# result_l=[]
# for filtrate in filtrate_l:
#     if filtrate.endswith('v'):
#         result_l.append(filtrate)
# print (result_l)

'''
二、高级版
'''
# filtrate_l=['miku_v','rin_v','ran_v','ruka_v','misaka_a','yuu_a']
# def map_test(arge):
#     result_l=[]
#     for filtrate in arge:
#         if filtrate.endswith('v'):
#             result_l.append(filtrate)
#     return result_l
# print(map_test(filtrate_l))

'''
三、进阶版
'''
# filtrate_l=['miku_v','rin_v','ran_v','ruka_v','misaka_a','yuu_a']
# def fun_do(arge):
#     return arge.endswith('v')
#
# def map_test(func,arge):
#     result_l=[]
#     for filtrate in arge:
#         if func(filtrate):
#             result_l.append(filtrate)
#     return result_l
# print(map_test(fun_do,filtrate_l))

'''
四、终极版:将匿名函数作为参数传入函数
'''
# filtrate_l=['miku_v','rin_v','ran_v','ruka_v','misaka_a','yuu_a']
# def map_test(func,arge):
#     result_l=[]
#     for filtrate in arge:
#         if func(filtrate):
#             result_l.append(filtrate)
#     return result_l
#
# print(map_test(lambda a:a.endswith('v'),filtrate_l))

'''
我们写的完成上面需求的函数,在python内部已经帮我们定义了这样一个函数
即filter()函数,filter函数是将一个可迭代对象以给定的方式筛选出我们
想要的值,有所不同的是filter的结果为一个迭代器
'''

# filtrate_l=['miku_v','rin_v','ran_v','ruka_v','misaka_a','yuu_a']
# print(list(filter(lambda a:a.endswith('v'),filtrate_l)))


# '''
# map函数:将传入的可迭代对象每个元素一给定的方式进行处理
# def map (fanc,arge):
#     result=[]
#     for a in arge:
#         resule.append(func(a))
#     return result
#
# '''
# filtrate_l=['miku_v','rin_v','ran_v','ruka_v','misaka_a','yuu_a']
# print(list(map(lambda a:a+' like',filtrate_l)))


'''
reduce 函数:将传入的可迭代对象以指定方式将所有元素合并为一个元素
可传入初始值,默认为空

def reduce_test (func,arge,init=None):
    if init==None:
        i=arge.pop(0)
    else:
        i=init
    for a in arge:
        i=func(i,a)
    return i

'''
from functools import reduce


filtrate_l=['miku_v','rin_v','ran_v','ruka_v','misaka_a','yuu_a']

print(reduce(lambda a,b:a+" "+b,filtrate_l))

 

posted @ 2020-06-13 17:54  雑音未来  阅读(181)  评论(0编辑  收藏  举报