高阶函数-map/filter/reduce
时间:2019-10-22
本文章向大家介绍高阶函数-map/filter/reduce,主要包括高阶函数-map/filter/reduce使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
什么样的函数叫高阶函数:
条件:1.函数接受函数作为参数
2.函数的返回值中包含函数
高阶函数之----map函数 map(func, *iterables) --> map object
num_l = [1,2,3,4,5,6]
b = map(lambda x:x**2,num_l)
print(b)
for i in b:
print(i)
>>> <map object at 0x0000023023782358> #返回map对象,是迭代器
1
4
9
16
25
36
num_l = [1,2,3,4,5,6]
def add_one(x):#也可以将lambda函数作为参数,等价于lambda x:x+1
return x+1
def reduce_one(x):
return x-1
def map_number(func,array):#传函数作为参数,将处理的功能封装
ret = []
for i in num_l:
res = func(i) #add_one或者reduce_one
ret.append(res)
return ret
print(map_number(add_one,num_l))#map_number((lambda x:x+1),num_l)
>>>[2, 3, 4, 5, 6, 7]
上述的代码其实就是map()函数!无意中完成了map内置函数!等价map((lambda x:x+1),num_l)
高阶函数之-filter filter(function or None, iterable) --> filter object
例子:
all_starts = ['kobe','kg','ai','jorden','jamse','sb_zhouqi','sb_guoailun']
def filter_test(array):
ret = []
for i in array:
if not i.startswith('sb'):
ret.append(i)
return ret
res = filter_test(all_starts)
print(res)
>>>['kobe', 'kg', 'ai', 'jorden', 'jamse']
上面的例子可以看出,处理的逻辑还是通过for循环来实现的,但是如果处理的不是以sb开头怎么办?处理以XX为中间的怎么办?
所以此时处理的逻辑可以单独写成函数,就会很好用,如同上面的map函数,你给我处理逻辑的函数和要处理的可迭代对象,我就给你处理!
唯一的不同是此时的逻辑是判断bool,通过True或者False来过滤,除去函数逻辑中的元素,此时filter函数应运而生!而filter是保留
满足函数逻辑的元素!
all_starts = ['kobe','kg','ai','jorden','jamse','sb_zhouqi_sb','sb_guoailun_sb']
def sb_show(n):
return n.endswith('sb')
def filter_test(func,array):
ret = []
for i in array:
if not func(i):
ret.append(i)
return ret
res = filter_test(sb_show,all_starts)
print(res)
无意中把filter函数构造出来了!说白了就是将可迭代对象array中的每个元素拿出来给前面的函数处理,处理结果是True的保留
处理结果是False的舍弃。
终极版本:ret = filter(lambda x:not x.startswith('sb'),array)
print(list(ret))
>>>['kobe', 'kg', 'ai', 'jorden', 'jamse']
高阶函数之---reduce
from functools import reduce
num = [1,2,3,4]
def reduce_test(array):
res = 0
for i in array:
res+=i
return res
print(reduce_test(num))
>>>10-------逻辑写死了,只能完成自增,如果想完成自乘怎么办?
num = [1,2,3,4]
lambda x,y:x*y
def reduce_test(func,array):
res = array.pop(0)
for i in array:
res = func(res,i)
return res
print(reduce_test(lambda x,y:x*y,num))
>>>24
可以进一步优化,指定初始的基数,比如reduce_test(func,array,init=10)指定初始化的init基数是10
num = [1,2,3,4]
lambda x,y:x*y
def reduce_test(func,array,init=None):
if init is None:
res = array.pop(0)
else:
res = init
for i in array:
res = func(res,i)
return res
print(reduce_test(lambda x,y:x*y,num,100))
reduce将完整的序列压缩成一个值!map-reduce就是大数据的概念,将获取的数据加工,然后整合成一个最终结果
from functools import reduce
num = [1,2,3,4]
res = reduce(lambda x,y:x+y,num,100)--->这个直接返回一个值给你,而map,filter是返回一个对象!!!
print(res)
>>>110
小结:
map:处理序列中的每个元素,得到一个map对象的结果,结果中的每一个元素都和原来的位置一样
filter:遍历序列中的每个元素,判断元素得到bool值秒如果是True则保留
reduce:处理一个序列,整合合并操作
原文地址:https://www.cnblogs.com/qyan-blog/p/11718375.html
- spring boot集成druid连接池
- spring boot整合dubbox进行服务拆分
- Spring Cloud中如何保证各个微服务之间调用的安全性
- Spring Boot Actuator监控页面报错解决
- Spring Cloud中如何优雅的使用Feign调用接口
- Spring Cloud Eureka 集群高可用
- Spring Cloud Eureka 增加权限认证
- Spring Cloud Eureka 初探
- 房价网是怎么使用分布式作业框架elastic-job
- Spring Cloud Sleuth Zipkin 展示追踪数据
- Spring cloud Zuul Filter 使用小经验
- Spring Cloud Eureka REST 接口
- Spring Cloud Eureka 控制台快速查看Swagger API文档
- Spring Cloud Feign 启动UnsatisfiedDependencyException
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Flutter 专题】96 图解 Draggable + DragTarget 基本拖拽效果
- Spring 基于注解(annotation)的配置之@Autowired注解
- 人心易变,这段有趣的C代码也一样!!!
- matplotlib绘制常见统计图形(一)
- python与安全(二)格式化字符串和Flask session
- ROS2机器人笔记20-07-24
- Postgresql 渗透利用总结
- Spring 基于注解(annotation)的配置之@Required注解
- 由一个系统激活工具引起的一次简单测试
- Golang channel 快速入门
- 潘石屹用Python解决100个问题 | 素数
- Spring 自动装配模式之构造函数装配方式
- 安全狗 {safedog} 最新版注入bypass
- C语言定时关机小程序
- 深入k8s:Pod对象中重要概念及用法