map/reduce+lambda让程序简单化
map()函数
map()
函数接收两个参数,一个是函数,一个是Iterable
,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator
返回。
也就是 map(f,[x,x,x,x]) 那么f是一个函数,[x,x,x,x]是一个序列,那么map完成的操作是将序列里面的每一个元素x传入到函数f中去执行,将每个元素执行的结果返回为新的序列 Iterator(惰性序列)
由于Iterator是惰性序列,因此如果要将结果以序列方式显示出来,那么一般在前面加 list 以列表的形式显示出来。
举例说明,比如我们有一个函数f(x)=x^2,要把这个函数作用在一个list [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])
list(r)
运行结果:[1, 4, 9, 16, 25, 36, 49, 64, 81]
reduce函数
reduce
把一个函数作用在一个序列[x1, x2, x3, ...]
上,这个函数必须接收两个参数,reduce
把结果继续和序列的下一个元素做累积计算。
效果为:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
例如:把序列[1, 3, 5, 7, 9]
变换成整数13579
from functools import reduce
def fn(x, y):
return x * 10 + y reduce(fn, [1, 3, 5, 7, 9]) 运行结果:13579
lambda函数
lambda可一行实现定义一个函数
lambda 自变量:完成的功能表达式
例如 lambda x,y:x+y 及定义了一个两参数求和的函数
map/reduce+lambda的简化
最开始的利用map函数对一个列表的元素求平方的代码就可以改成:
list(map(lambda x:x*x,[1,2,3,4,5,6,7,8,9]))
结果相同,简化了代码
后面利用reduce将序列[1,3,5,7,9]变成整数13579的代码可以简化为:
from functools import reduce
reduce(lambda x,y:x*10+y,[1,3,5,7,9])
自身觉得map+lambda的结构配合要经常使用,以后会派上用场的。
map/reduce+lambda让程序简单化的更多相关文章
- filter,map,reduce,lambda(python3)
1.filter filter(function,sequence) 对sequence中的item依次执行function(item),将执行的结果为True(符合函数判断)的item组成一个lis ...
- Python2.7学习笔记-定义函数、filter/map/reduce/lambda
我把写的代码直接贴在下面了,注释的不是很仔细,主要是为了自己复习时方便查找,并不适合没有接触过python的人看,其实我也是初学者. #定义函数 def my_abs(x): if x>=0: ...
- 【python深入】map/reduce/lambda 内置函数的使用
python中的内置函数里面,有map和reduce两个方法,这两个方法可以非常好的去做一些事情,但是之前都没有用过,下面是关于这两个方法的介绍: 一.map相关 map()会根据提供的函数对指定的序 ...
- Python中特殊函数和表达式 filter,map,reduce,lambda
1. filter 官方解释:filter(function or None, sequence) -> list, tuple, or string Return those items of ...
- Python中 filter | map | reduce | lambda的用法
1.filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tupl ...
- python: filter, map, reduce, lambda
filter built-in function filter(f,sequence) filter can apply the function f to each element of seque ...
- python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))
1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...
- Python基础灬高阶函数(lambda,filter,map,reduce,zip)
高阶函数 lambda函数 关键字lambda表示匿名函数,当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. lambda函数省略函数名,冒号前为参数,冒号后函数体. # ...
- Python: lambda, map, reduce, filter
在学习python的过程中,lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是不是必须使用lambda? 下面就上面的问题进行一下解答. 1.lambda是什么? ...
随机推荐
- 【5min+】 对象映射只有AutoMapper?试试Mapster
系列介绍 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net ...
- windows、linux 下启用mysql日志功能
在默认情况下,mysql安装是没有启用日志管理功能的,这为后续的维护带来很多不便的地方. 查看是否启用了日志mysql>show variables like 'log_bin'; 怎样知道当前 ...
- golang 引入 和 创建 包
/* 单个包: improt "包目录的路径" 多个包: improt ("包目录的路径", "包目录的路径") improt ( &quo ...
- ELF文件之五——使用链接脚本-2个函数-data-bss
main.c int enable; ; int main() { ; } int add() { ; } bss段在elf中虽然size是4,但并不占filesize,节头表如下图所示 程序头中,项 ...
- drf序列化高级、自定义只读只写、序列化覆盖字段、二次封装Response、数据库查询优化(断关联)、十大接口、视图家族
目录 自定义只读 自定义只写 序列化覆盖字段 二次封装Response 数据库关系分析 断外键关联关系 ORM操作外键关系 ORM四种关联关系 基表 系列化类其他配置(了解) 十大接口 BaseSer ...
- [Redis-CentOS7]Python操作Redis(十一)
Python 操作redis #!/usr/bin/env pyhton # coding:utf-8 # @Time : 2020-02-16 21:36 # @Author : LeoShi # ...
- vue简单实现
vue简单实现 vue的三个核心 虚拟dom, 双向绑定 Proxy,
- 在线使用iconfont字体图标
登录https://www.iconfont.cn 把需要的图标加入购物车,然后加入项目 打开我的项目,生成代码 有3中方式使用图标 unicode和font class本质都是使用字体,好处在于兼容 ...
- Django 系列
Django基础 Django框架简介 Django 静态文件 Django request对象与ORM简介 Django路由系统 Django之视图层 Django之模板层 Django的setti ...
- Anaconda使用教程全攻略
Anaconda使用教程全攻略 本文转自 https://zhuanlan.zhihu.com/p/32925500 〇.序 Python是一种面向对象的解释型计算机程序设计语言, ...