当前位置: 首页 > news >正文

python之map、filter、reduce、lambda函数 转

python之map、filter、reduce、lambda函数

 转  http://www.cnblogs.com/kaituorensheng/p/5300340.html
回到顶部

map

map函数根据提供的函数对指定的序列做映射,定义:
map(function, sequence[,sequence,...])--->list

例1

复制代码
>>> map(lambda x:x+2, [1, 2, 3])
[3, 4, 5]
>>> map(lambda x:x+2, (1, 2, 3))
[3, 4, 5]
>>> map(lambda x:x+2, [1, 2], [1, 2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 1 argument (2 given)
复制代码

最后这个例子说lambda函数需要传2个参数(因为后面的列表是2个)

例2

>>> map(lambda x,y:x+y, [1, 2], [1, 2])
[2, 4]
>>> map(lambda x,y:x+y, [1, 2], (1,2))
[2, 4]

例3

复制代码
>>> a
[{'type': 2, 'ID': 1}, {'type': 4, 'ID': 2}, {'ID': 3}]
>>> map(lambda x:x['ID'], a)
[1, 2, 3]
>>> map(lambda x:x['type'], a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
KeyError: 'type'
复制代码

例子说明,如果其中的一个键不存在({'ID':3}不存在type)会报错。

例4

上面例子中只给了lambda,还可以用普通的函数

复制代码
>>> def func2(x, y):
...     return x+y
... 
>>> map(func2, [1, 2, 3], [3, 2, 1])
[4, 4, 4]
>>> 
>>> def func1(x):
...     return x**2
... 
>>> map(func1, [1, 2, 3])
[1, 4, 9]
复制代码

例5

如果没有给定,就类似于zip函数了

复制代码
>>> map(None, [1, 2, 3, 4], [1, 2, 3, 4])
[(1, 1), (2, 2), (3, 3), (4, 4)]
>>> map(None, [1, 2, 3, 4], [1, 2, 3, 4,5])
[(1, 1), (2, 2), (3, 3), (4, 4), (None, 5)]
>>> map(None, [1, 2, 3, 4], [1, 2, 3, 4,5], [1, 2, 3])
[(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, None), (None, 5, None)]
复制代码

不过与zip不同

>>> zip([1, 2, 3, 4], [1, 2, 3, 4,5], [1, 2, 3])
[(1, 1, 1), (2, 2, 2), (3, 3, 3)]
回到顶部

filter

filter函数对指定的序列进行过滤操作。定义:

filter(function or None, sequence) -> list, tuple, or string

例1

>>> filter(lambda x:x%2==1, [1, 2, 3])
[1, 3]
>>> filter(lambda x:x%2==1, (1, 2, 3))
(1, 3)
回到顶部

reduce

reduce函数会对参数序列中元素进行累积。定义:
reduce(function, sequence[, initial]) -> value

:function必须是有2个参数的函数

例1

>>> reduce(lambda x, y:x+y, [1,2,3,4])
10
>>> reduce(lambda x, y:x+y, [1,2,3,4], 10)
20

如果没有initial参数,这么算:(((1+2)+3)+4)

如果有initial参数,这么算: ((((10+1)+2)+3)+4)

回到顶部

lambda

编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数

举例对比(列表中的元素平方):

复制代码
>>> map(lambda x:x*x, range(5))
[0, 1, 4, 9, 16]

>>> def sq(x):
...     return x * x
... 
>>> map(sq, range(5))
[0, 1, 4, 9, 16]
复制代码
前者比后者好。因为后者多定义了一个(污染环境的)函数,尤其如果这个函数只会使用一次的话。而且第一种写法实际上更易读,因为那个映射到列表上的函数具体是要做什么,非常一目了然。如果你仔细观察自己的代码,会发现这种场景其实很常见:你在某处就真的只需要一个能做一件事情的函数而已,连它叫什么名字都无关紧要。Lambda 表达式就可以用来做这件事。

map(lambda x:x*x, range(5))
这样的写法时,你会发现自己如果能将「遍历列表,给遇到的每个元素都做某种 运算」的过程从一个循环里抽象出来成为一个函数 map,然后用 lambda 表达式将这种 运算作为参数传给 map 的话,考虑事情的思维层级会高出一些来,需要顾及的细节也少了一点。Python 之中,类似能用到 lambda 表达式的「高级」函数还有 reduce、filter 等等

转载于:https://www.cnblogs.com/mmbbflyer/p/6022233.html

相关文章:

  • Linux 命令行总结
  • jquery.spinner数字智能加减插件源代码效果
  • 关键字提取算法TF-IDF
  • 微软Madoko常见问题总结
  • 【Python基础学习二】定义变量、判断、循环、函数基本语法
  • HTML5 Canvas 练习及知识点分享之绘制圆及曲线(一)
  • redis安装出错
  • js基础总结 一
  • 总结Selenium自动化测试方法(四)WebDriver常用的操作
  • js 时间与时间戳的转换
  • HTTP——学习笔记(1)
  • ORACLE 体系结构
  • 数字证书调研整理-基本概念
  • delphi 中sql的语法规范
  • sql数据库链接
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 《Java编程思想》读书笔记-对象导论
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • centos安装java运行环境jdk+tomcat
  •  D - 粉碎叛乱F - 其他起义
  • Lucene解析 - 基本概念
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Python语法速览与机器学习开发环境搭建
  • ReactNative开发常用的三方模块
  • Swoft 源码剖析 - 代码自动更新机制
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 线性表及其算法(java实现)
  • 用mpvue开发微信小程序
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​flutter 代码混淆
  • ​比特币大跌的 2 个原因
  • (12)目标检测_SSD基于pytorch搭建代码
  • (待修改)PyG安装步骤
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (学习日记)2024.01.19
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)socket Aio demo
  • (转)四层和七层负载均衡的区别
  • .bashrc在哪里,alias妙用
  • .gitignore文件---让git自动忽略指定文件
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET Core跨平台微服务学习资源
  • .net web项目 调用webService
  • .NET 材料检测系统崩溃分析
  • .NET大文件上传知识整理
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .Net中wcf服务生成及调用
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @RestControllerAdvice异常统一处理类失效原因
  • [CUDA 学习笔记] CUDA kernel 的 grid_size 和 block_size 选择