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 ...
随机推荐
- 项目实战2.2—nginx 反向代理负载均衡、动静分离和缓存的实现
实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备注 nginx VIP:172.17.11.11 反向代理服务器 开启代理功能 设置监控,调度 rs01 RIP ...
- 《天书夜读:从汇编语言到windows内核编程》二 C语言的流程与处理
1) Debug与Release的区别:前者称调试版,后者称发行版.调试版基本不优化,而发行版会经过编译器的极致优化,往往与优化前的高级语言执行流程会大相径庭,但是实现的功能是等价的. 2) 如下fo ...
- Linux系列教程(二十二)——Linux的bash变量
上篇博客我们介绍了bash的一些基本功能,这是我们平时操作最频繁的.本篇博客我们介绍bash的变量,为后面编写shell脚本做铺垫. 1.什么是变量 变量是计算机内存的单元,其中存放的值可以改变. 当 ...
- 学会WCF之试错法——数据传输
数据传输 服务契约 [ServiceContract] public interface IService { [OperationContract] string GetData(int value ...
- mybatis批量修改
使用mybats经常要用到批量修改或者删除,贴出批量修改的代码.如果是批量删除,可将update换成delete. <update id="changestatus" par ...
- 照虎画猫写自己的Spring——依赖注入
前言 上篇<照虎画猫写自己的Spring>从无到有讲述并实现了下面几点 声明配置文件,用于声明需要加载使用的类 加载配置文件,读取配置文件 解析配置文件,需要将配置文件中声明的标签转换为F ...
- 2017湖湘杯Writeup
RE部分 0x01 Re4newer 解题思路: Step1:die打开,发现有upx壳. Step2:脱壳,执行upx -d 文件名即可. Step3:IDA打开,shift+F12看字符串. 点进 ...
- listview相关代码整理
虽然listview已经慢慢被替代了, 不过还是整理下 , 留作纪念吧 /** * 获取 listview 实际滚动的距离. [ 相对于listview的第一个项目左上角.] * * @return ...
- 机器学习 F1-Score 精确率 - P 准确率 -Acc 召回率 - R
准确率 召回率 精确率 : 准确率->accuracy, 精确率->precision. 召回率-> recall. 三者很像,但是并不同,简单来说三者的目的对象并不相同. 大多时候 ...
- kafka原理和实践(一)原理:10分钟入门
系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...