博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
map和reduce
阅读量:4327 次
发布时间:2019-06-06

本文共 1171 字,大约阅读时间需要 3 分钟。

Python内建了map()reduce()函数。

map

map()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

举例说明,有一个函数f(x)=x2,要把这个函数作用在[1, 2, 3, 4, 5, 6, 7, 8, 9]上,就以用map

>>> def f(x):...     return x*x...>>> r = map(f,[1, 2, 3, 4, 5, 6, 7, 8, 9])>>> r>>> list(r)[1, 4, 9, 16, 25, 36, 49, 64, 81]

map传入的第一个参数是f,即函数对象本身。由于结果r是一个Iterator惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。

如果不用map(),写一个循环,也可以实现结果:

>>> L = []>>> for n in [1,2,3,4,5,6,7,8,9]:...     L.append(f(n))...>>> L[1, 4, 9, 16, 25, 36, 49, 64, 81]

但是实现效果不够map清晰,看不出“把f(x)作用在list的每一个元素并把结果生成一个新的list”

所以,map()作为高阶函数,事实上把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,比如,把这个list所有数字转为字符串

>>> list(map(str,[1,2,3,4,5,6,7,8,9]))['1', '2', '3', '4', '5', '6', '7', '8', '9']

只需要一行代码。

reduce

reduce把一个函数作用在一个序列[x1,x2,x3..]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

比方说对一个序列求和

>>> from functools import reduce>>> def add(x,y):...     return x+y...>>> reduce(add,[1,2,3,4])10

当然求和运算也可以直接使用sum()没必要动用reduce

但是如果要把序列[1,2,3,4]转换成整数1234reduce就可以派上用场

>>> def fn(x,y):...     return x*10+y...>>> reduce(fn,[1,2,3,4])1234

转载于:https://www.cnblogs.com/velscode/p/10575192.html

你可能感兴趣的文章
阶段3 2.Spring_04.Spring的常用注解_2 常用IOC注解按照作用分类
查看>>
阶段3 2.Spring_09.JdbcTemplate的基本使用_5 JdbcTemplate在spring的ioc中使用
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_02.ssm整合之搭建环境
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_3、快速创建SpringBoot应用之手工创建web应用...
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_04.ssm整合之编写SpringMVC框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_5、SpringBoot2.x的依赖默认Maven版本...
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_08.ssm整合之Spring整合MyBatis框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_9、SpringBoot基础HTTP其他提交方法请求实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_12、SpringBoot2.x文件上传实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_19、SpringBoot个性化启动banner设置debug日志...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_20、SpringBoot2.x配置全局异常实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_23、SpringBoot2.x启动原理概述...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_21、SpringBoot2.x配置全局异常返回自定义页面...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_34、SpringBoot整合Mybatis实操和打印SQL语句...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_35、事务介绍和常见的隔离级别,传播行为...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>