函数式编程以及map、reduce、filter函数

函数式编程以及map、reduce、filter函数


可迭代对象:str , list , tuple

map 映射,map函数是指将一个对象(可迭代)中的每个子元素分别按照映射关系处理

filter 过滤,filter函数是指将一个对象(可迭代)象的每个子元素按照过滤条件进行过滤,保留过滤结果为True的子元素

reduce 归纳,reduce函数是指将一个对象(可迭代)的每个子元素按照归纳算法进行整合,得出一个数据


1. filter函数

函数特性:

  • 将一个对象(可迭代)象的每个子元素按照过滤条件进行过滤,保留过滤结果为True的子元素
  • 如果将得出的结果(可迭代对象)用list()组成一个列表,则得出的列表与原对象的子元素数量和索引不同

格式:

filter(function,iterable_object)

filter函数返回的结果是一个可迭代对象,可使用 list() 来将迭代对象组成列表

filter函数的演化过程:

fruits = ['apple','pear','peach','banana','orange']

def startwith_p(i):
    if i.startswith('p'):
        return i

def endwith_e(i):
    if i.endswith('e'):
        return i

def filter_choose(func,array):
    choice = []
    for a in array:
        if not func(a):
            choice.append(a)
    return choice

print(filter_choose(endwith_e,fruits))
print(filter_choose(startwith_p,fruits))
# ['pear', 'peach', 'banana']
# ['apple', 'banana', 'orange']

可转化成以下简写形式

def filter_choose(func,array):
    choice = []
    for a in array:
        if not func(a):
            choice.append(a)
    return choice
print(filter_choose(lambda n:n.startswith('p'),fruits))
# ['apple', 'banana', 'orange']

可转化成内置的filter函数

print(list(filter(lambda x:not x.startswith('p'),fruits)))
# ['apple', 'banana', 'orange']

2. map函数

函数特性:
  • 将一个对象(可迭代)中的每个子元素分别按照映射关系处理
  • 如果将得出的结果(可迭代对象)用list()组成一个列表,则得出的列表与原对象的子元素数量和索引都相同

格式:

map(funcion,iterable_object)

其中,func 为函数:如果处理方法简单可使用匿名函数

map函数返回的结果是一个可迭代对象,可使用 list() 来将迭代对象组成列表

例1:

li = [1,234,36,23,15]
print(map(lambda x:x/2,li))
print(list(map(lambda x:x+20,li)))
# <map object at 0x00000000011DB4A8>
# [21, 254, 56, 43, 35]

例2

msg = 'alex'
print(list(map(lambda x:x.upper(),msg)))
# ['A', 'L', 'E', 'X']

例3

dic = {'name':'alex','age':'18','hobby':'apple'}
print(list(map(lambda x:x.upper(),dic.values())))
# ['ALEX', '18', 'APPLE']

3. reduce函数

函数特性:

  • 将一个对象(可迭代)的每个子元素按照归纳算法进行整合,得出一个数据
  • 得出的结果是一个固定的不可迭代对象
  • 可指定初始值,初始值默认为空
  • reduce函数需要调用functools工具中的reduce模块,执行语句:
from functools import reduce

格式:

reduce(function,iterable_object,init_value=None)

reduce函数返回的结果是一个不可迭代的固定值

例1:

from functools import reduce
sequence = [1,2,3,10]
print(reduce(lambda x,y:x*y,sequence))
# 60

例2:指定初始值

from functools import reduce
sequence = [1,2,3,10]
print(reduce(lambda x,y:x*y,sequence,10))
# 600
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值