函数式编程以及map、reduce、filter函数
2017-11-22 16:27
477 查看
函数式编程以及map、reduce、filter函数
可迭代对象:str , list , tuplemap 映射,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
相关文章推荐
- Hadoop Map&Reduce个数优化设置以及JVM重用
- 【转】Python 中map、reduce、filter函数
- python3 中的 map,reduce,filter函数
- Python学习4:生成器、lamda表达式及map、reduce、filter函数
- Python学习4:生成器、lamda表达式及map、reduce、filter函数
- 函数式编程之map/reduce
- Python学习札记(二十一) 函数式编程2 map/reduce
- Python学习4:生成器、lamda表达式及map、reduce、filter函数
- Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊
- 函数式编程 map,reduce,filter,lambda
- Python中的map()和reduce()以及一些栗子
- 生成器、lamda表达式及map、reduce、filter函数 .
- 如何确定map以及reduce的个数
- 函数式编程-高阶函数map()及reduce(),fillter(),sorted()
- Python中lambda, map, reduce和filter函数的用法小结
- Python碎片化知识:map,reduce,lambda以及zip
- Javascript实现ECMAScript 5中的map、reduce和filter函数
- Python:Python的map,reduce,lambda,filter函数
- [Java 8] (10) 使用Lambda完成函数组合,Map-Reduce以及并行化
- [Java 8] (10) 使用Lambda完成函数组合,Map-Reduce以及并行化