python 列表解析
列表解析,主要用于动态创建列表
本篇主要说一下,lambda、map()、和filter()同列表解析语句之间结合的用法
列表解析的基本语法为:[expr for iter_var in iterable]
这个语句的核心是for循环,他迭代iterable对象的所有条目。前面的expr应用于序列的每个成员,最后的结果值是表达式产生的列表。
1. 基础使用
来一段示例吧
在idle中进行测试:
>>> [i for i in range(0,8)]
[0,1,2,3,4,5,6,7]
其中 i 即是基本语法中的expr也是iter_val;再换一种方式,我们对里面的值进行一下运算让所有的成员乘以2
>>> [i*2 for i in range(0,8)]
[0, 2, 4, 6, 8, 10, 12, 14]
这就是完全按照基本语法写的一个列表解析
2. 再循环语句后面添加判断条件
扩展版本语法:[expr for iter_val in iterable if cond_expr]
我们还可以进行拓展,在他的后面再添加一些语句,对列表进行筛选;比如我们只要这个数值中可以被2整除的数
>>> [i for i in range(1,8) if i%2 == 0]
[ 2, 4, 6]
这种语句类似于使用filter,所以我们同样可以采用python内置的filter函数实现,以达到获取相同的值
>>> l = filter(lambda x:x%2==0, range(1,8))
>>> for i in l:
i
2
4
6
但是发现没有,有一些不一样,因为我并没有直接打印出列表。为什么呢?因为filter的返回值是一个生成器(generator),生成器是
无法知道所有的值的,只能通过迭代的方式获取下一个值
3. map用于达到跟列表解析相同的结果
>>> map(lambda x: x*2, range(1,8))
[2, 4, 6, 8, 10, 12, 14]
使用它可以获得 [x * 2 for x in range(1,8)]一样的效果,但是使用后者回比map()更高效
4. 生成矩阵
当你需要得到一个3行5列的矩阵的时候,很简单:
>>> [(x,y) for x in range(0,3) for y in range(0,5)]
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4),
(1, 0), (1, 1), (1, 2), (1, 3), (1, 4),
(2, 0), (2, 1), (2, 2), (2, 3), (2, 4)]
大家也可以在PEP 202找到更多的参考列表解析的资料
python 列表解析的更多相关文章
- Python列表解析与生成器表达式
Python列表解析 l = ["egg%s" %i for i in range(100) if i > 50] print(l) l= [1,2,3,4] s = 'he ...
- python列表解析补充:
python列表解析补充: # 补充: f = [x + y for x in 'ABCDE' for y in '1234567'] print(f) test = [] for x in 'ABC ...
- python 列表解析与map和filter函数
不知哪儿看到一个说法,大概是当map的函数参数可以直接引用一个已有的函数变量时(比如内建函数int,str之类的),用map更优美些,否则还是用列表解析更直观和快速. 我同意此说法. 昨天在写一个函数 ...
- 【392】Python 列表解析
参考: Python3 数据结构 | 菜鸟教程 列表推导式 列表推导式提供了从序列创建列表的简单途径.通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的 ...
- Python列表解析
列表解析 根据已有列表,高效创建新列表的方式. 列表解析是Python迭代机制的一种应用,它常用于实现创建新的列表,因此用在[]中. 语法: [expression for iter_val in i ...
- Python 列表解析list comprehension和生成表达式generator expression
如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析(List comprehensions)和生成表达式(generator expression) (1)list ...
- Python列表解析和字典解析
python笔记_列表解析 相比于for循环,列表解析的语法是由底层c语言实现的,它和使用for循环遍历pyobject对象相比,性能会有很大的提升. 无条件子句的列表解析式 In [2]: [2*i ...
- python列表解析进阶
如果要获得一个(元素为整数的)列表里面的偶数,很容易想到列表解析: [i for i in nums if i%2==0] 但是如果要使列表的长度不变,让奇数用0来填充,可能你会直接写: [i for ...
- python列表解析和生成器表达式
列表解析作为动态创建列表的强大工具,值得学习. 列表解析技术之前的状况--函数式编程. lambda.filter(), map() enumerate, sorted, any, all, zip ...
随机推荐
- Filezilla账号密码都正确,但是连不上
显示的错误信息是:服务器发回了不可路由的地址.使用服务器地址代替. 之前一直用CuteFTP把ssm项目发送给客户服务器,最近学习大数据用Filezilla连通虚拟机,感觉Filezilla很直观.就 ...
- 我是如何理解Android的Handler模型_3
AsyncTask则相当于现代化的电话系统,接线员的功能被完全封装了. 对于上例,新建更新TextView的类并继承AsyncTack类,如下: class UpdataTV extends Asyn ...
- 基于.NET CORE微服务框架 -surging 基于messagepack、protobuffer、json.net 性能对比
1.前言 surging内部使用的是高性能RPC远程服务调用,如果用json.net序列化肯定性能上达不到最优,所以后面扩展了protobuf,messagepack序列化组件,以支持RPC二进制传输 ...
- 想使用Docker容器?先看看这些注意事项
Docker容器无疑是最近十年来最引人注目的技术之一,因为有了它,对我们思考设计.开发和运维软件的方式产生了非常有益的影响. 但是就像每一个开发工具一样,为了充分利用这些工具,需要注意一些使用中问题, ...
- 字节、十六进制字符串相互转换(asc2hex、hex2asc)
//================================================================== /** 功能: 将16进制数组转换成asc字符数组(短转长) ...
- UEditor1.4.3.3实现图片上传、删除功能
1.下载ueditor1.4.3.3 UTF-8的版本 2.新建一个项目,在项目中添加UEditor,把下载好的插件都放在ueditor这个文件夹中,在进行一些基本的配置 3.在根目录下新建一个为in ...
- Activity讲解
Activity Activity 是 Android 应用的重要组成单元之一(另外三个是 Service.BroadcastReceiver 和 ContentProvider),而 Activit ...
- <meta http-equiv="X-UA-Compatible" content="IE=edge">的作用
X-UA-Compatible是针对ie8新加的一个设置,对于ie8之外的浏览器是不识别的. X-UA-Compatible 是针对 IE8 版本的一个特殊文件头标记,用于为 IE8 指定不同的页面渲 ...
- #centos7 设置bond、bridge、vlan
#centos7 设置bond.bridge.vlan #centos7 设置bond.bridge.vlan # CentOS7中 nmcli命令由NetworkManager提供 # 可以用于设置 ...
- 高可用的Spring FTP上传下载工具类(已解决上传过程常见问题)
前言 最近在项目中需要和ftp服务器进行交互,在网上找了一下关于ftp上传下载的工具类,大致有两种. 第一种是单例模式的类. 第二种是另外定义一个Service,直接通过Service来实现ftp的上 ...