列表生成式+过滤器(filter)+映射(map)+lambda总结
这些都是python的特色,不仅强大,而且好用,配合起来使用更是无敌。
零、lambda
lambda用于产生一个匿名表达式,组成部分为:lambda + ‘函数表达式’ ‘函数表达式’由一个冒号加上两个‘操作数’组成,如:
lambda x:x*3
冒号左边的操作数,作为函数的参数;冒号右边的作为函数的放回值!
那么lambda x:x*3就等价于:
def xxx(x):
return x*3
一、列表生成式
列表生成器,可以由3个部分组成,这3个从左到右的顺序是:
1、表达式部分:一般为一个表达式作用一个列表的元素;或者就该元素,不作用任何表达式 、
2、列表生成部分:一般为一个for循环产生初始列表,并依次导出元素
3、过滤部分:一般由一个if判断构成,条件为假的过滤掉。这个部分可选。
总结一下列表生成器就是:
[表达式部分 列表生成部分 过滤部分(可选)]#注意三个部分之间空格隔开即可
例子:
[ str(i) for i in range(1, 100) if not(i%3)]
这个理解顺序过程是:
首先由列表生成部分:for i in range(1, 100)逐一产生列表的元素,
每个 元素经过过滤部分:if not(i%3)检测,判断为假的直接丢弃,
判断为真的再交给表达式部分:str(i) 进行处理得到新列表的元素。
这个流程直到for结束循环,新列表生成。
二、过滤器(filter)
过滤器有两个参数:function类型,序列
1、序列是将被筛选的原始集合,function类型是制定筛选的规则(公式)。
2、function类型如果返回None,或者说就是None,则序列中为值为假的将被过滤,如:
filter(None,(0,0,False,11,True,1,123)),就会过滤剩下[11, True, 1, 123]
注意到filter()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。
>>> list(filter(None,(0,0,False,11,True,1,123)))
[11, True, 1, 123]
3、当function类型是一个函数时,filter会将序列中每个元素带入函数,函数返回 假的元素被剔除,
如:
>>> list(filter(lambda x:not x%2,[x for x in range(10)]))
[0, 2, 4, 6, 8]
4、如果筛选的规则不复杂的话,列表生成式完全可以代替他:
[x for x in range(10) if(not x%2)]
三、映射(map)
1、和filter类似,不过这次不是过滤,而是映射:把一个序列映射成另一个序列,映射规则由一个函数制定。 2、同样map也有两个参数:function类型,序列,如:
map(lambda x:x**2,range(10)),这样序列[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]就被映射成了
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
注意到map()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。
>>> list(map(lambda x:x**2,range(10)))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
4、如果筛选的规则不复杂的话,列表生成式完全可以代替他:
[x**2 for x in range(10)]
总结:
1、filter和lambda结合,可以方便的筛选一个序列。
2、map和lambda结合,可以方便的映射出新的序列。
3、如果筛选/映射规则比较简单,可以直接用列表生成式代替,更加方便。
4、他们其实都可以各自结合,产生巨大爆发力。
列表生成式+过滤器(filter)+映射(map)+lambda总结的更多相关文章
- python列表推导同filter和map的比较
首先介绍下filter和map: filter: filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表. 该接收两个参数,第一个为函数,第二个为序列,序列的每个元 ...
- 2-2 列表推导同 filter 和 map 的比较
列表推导同 filter 和 map 的比较 参考廖雪峰的文档: filter()函数:用于过滤序列. filter()接收一个函数和一个序列.把传入的函数依次作用于传入的序列的每个元素,根据返回值是 ...
- lambda匿名函数,sorted排序,filter()筛选,map()映射
一丶匿名函数 语法: 函数名 = lambda参数:返回值 # 普通的正常的函数 def func(n): return n * n ret = func(9) print(ret) # 匿名函数 a ...
- Python filter,map,lambda,reduce,列表解析
filter用法 filter(func,seq) 将seq的元素逐一代入func,通过func的返回值来判断是保留还是过滤 >>> def foo(x): return x> ...
- 匿名函数lambda,过滤函数filter,映射类型map
匿名函数lambda, 作用是不用定义函数,用完之后会自动被删掉,在使用执行脚本的时候,使用lambda就可以省下定义函数的过程,简化代码的可读性. 格式是 例子g=lambda x,y:x+y g( ...
- lambda表达式,filter,map,reduce,curry,打包与解包和
当然是函数式那一套黑魔法啦,且听我细细道来. lambda表达式 也就是匿名函数. 用法:lambda 参数列表 : 返回值 例: +1函数 f=lambda x:x+1 max函数(条件语句的写法如 ...
- python语法学习第五天--lambda表达式、filter()、map()
lambda表达式 python使用lamda表达式来创建匿名函数 lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数 语法: lambda [arg1 [,arg ...
- Python3中高阶函数lambda,filter,map,reduce,zip的详细用法
在Python里有五大高阶函数,他们分别是lambda()匿名函数,filter()筛选函数,map()函数,reduce()函数,zip()函数.下面就让我们来详细的了解一下这五种函数的具体用法吧. ...
- python内置函数lambda、filter、map、reduce
lambda匿名函数 1.lambda只是一个表达式,函数体比def简单多. 2.lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去 3.lambda函数 ...
随机推荐
- MaterialRefreshLayout+ListView 下拉刷新 上拉加载
效果图是这样的,有入侵式的,非入侵式的,带波浪效果的......就那几个属性,都给出来了,自己去试就行. 下拉刷新 上拉加载 关于下拉刷新-上拉加载的效果,有许许多多的实现方式,百度了一下竟然有几十种 ...
- 在Docker Swarm上部署Apache Storm:第2部分
[编者按]本文来自 Baqend Tech Blog,描述了如何在 Docker Swarm,而不是在虚拟机上部署和调配Apache Storm集群.文章系国内 ITOM 管理平台 OneAPM 编译 ...
- CSS揭秘(一)引言
借了一本CSS揭秘,国外的一本书,应该是目前相关书目里最好的了,内容非常扎实,不得不说图灵教育出的书真的不错,不然不是很厚的一本书卖到99也是.... 国外的这类书总是以问题开始,然后通过解决问题引出 ...
- linux 下查看外网ip
1. curl ipinfo.io ~/codes/qt_codes/qt-5.4.1-build$ curl ipinfo.io{ "ip": "114.241.21 ...
- 无法获取链接服务器 "XXX" 的 OLE DB 访问接口 "SQLNCLI10" 的架构行集 "DBSCHEMA_TABLES_INFO"。该访问接口支持该接口,但使用该接口时返回了失败代码。
1. SQL 2000 下载补丁 SQL2KSP4 ,进行安装 2.找到SQL2KSP4\install\instcat.sql 并在sql2000 中打开查询分析器中执行
- mysql INSERT的几个语法 IGNORE|REPLACE|LOW_PRIORITY | DELAYED
INSERT IGNORE 与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据.这样就可以保留 ...
- firefox(火狐)和Chrome(google)浏览器清空缓存操作的方法指引
摘要说明: 1.系统做升级更新,更新了css和js 2.系统更新有,因为缓存问题,有客户反馈新增功能不能使用 3.所以要清空缓存,提供火狐和谷歌浏览器清空缓存的操作指引 4.附:代码层面的清空缓存方案 ...
- 解决:Host xxx.xxx.xxx.xxx is blocked because of many connection errors.
Host "xxx.xxx.xxx.xxx" is blocked because of many connection errors 1.原因:当使用错误的密码连接mysql时, ...
- NoSQL数据库的认识
SQL数据库和NoSQL数据库介绍 什么是SQL数据库? 关系型数据库是依据关系模型来创建的数据库.而所谓的关系模型就是“一对一.一对多.多对多”等关系模型,这是一种二维表格模型,因此一个关系型数据库 ...
- [BUG] python实例化N次类,调用类函数log会输出N遍的bug 解决办法
最近再写DOU用例时,采用的是 unittest测试框架,就涉及到将其它所有模块需要全部在一个 .py文件中进行实例化,然后再运行时发现在控制台中同一个日志信息会打印多次(实例化几次,同一消息就会打印 ...