列表解析,主要用于动态创建列表

本篇主要说一下,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 列表解析的更多相关文章

  1. Python列表解析与生成器表达式

    Python列表解析 l = ["egg%s" %i for i in range(100) if i > 50] print(l) l= [1,2,3,4] s = 'he ...

  2. python列表解析补充:

    python列表解析补充: # 补充: f = [x + y for x in 'ABCDE' for y in '1234567'] print(f) test = [] for x in 'ABC ...

  3. python 列表解析与map和filter函数

    不知哪儿看到一个说法,大概是当map的函数参数可以直接引用一个已有的函数变量时(比如内建函数int,str之类的),用map更优美些,否则还是用列表解析更直观和快速. 我同意此说法. 昨天在写一个函数 ...

  4. 【392】Python 列表解析

    参考: Python3 数据结构 | 菜鸟教程 列表推导式 列表推导式提供了从序列创建列表的简单途径.通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的 ...

  5. Python列表解析

    列表解析 根据已有列表,高效创建新列表的方式. 列表解析是Python迭代机制的一种应用,它常用于实现创建新的列表,因此用在[]中. 语法: [expression for iter_val in i ...

  6. Python 列表解析list comprehension和生成表达式generator expression

    如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析(List comprehensions)和生成表达式(generator expression) (1)list ...

  7. Python列表解析和字典解析

    python笔记_列表解析 相比于for循环,列表解析的语法是由底层c语言实现的,它和使用for循环遍历pyobject对象相比,性能会有很大的提升. 无条件子句的列表解析式 In [2]: [2*i ...

  8. python列表解析进阶

    如果要获得一个(元素为整数的)列表里面的偶数,很容易想到列表解析: [i for i in nums if i%2==0] 但是如果要使列表的长度不变,让奇数用0来填充,可能你会直接写: [i for ...

  9. python列表解析和生成器表达式

    列表解析作为动态创建列表的强大工具,值得学习. 列表解析技术之前的状况--函数式编程. lambda.filter(), map() enumerate, sorted, any, all, zip ...

随机推荐

  1. 数据库(概念、语法、DBMS、SQL语言:创建数据库、表格,添加、修改、删除数据记录)

    关系型数据库:以表作为实体,以主键和外键关系作为联系的一种数据结构. 主键:在关系型数据库中,用一个唯一的标识符来标志每一行,这个标识符就是主键.主键有两个特点:非空和不能重复. 外键:在关系型数据库 ...

  2. 2017年php面试题汇总

    1.http状态码 200 这个没有什么好说的,是代表请求被正常的处理成功了 302 代表临时重定向 400 400表示请求报文中存在语法错误.需要修改后再次发送 403 表明请求访问的资源被拒绝了. ...

  3. 从编辑距离、BK树到文本纠错

    搜索引擎里有一个很重要的话题,就是文本纠错,主要有两种做法,一是从词典纠错,一是分析用户搜索日志,今天我们探讨使用基于词典的方式纠错,核心思想就是基于编辑距离,使用BK树.下面我们来逐一探讨: 编辑距 ...

  4. Vim配置及使用笔记

    Vim配置及使用笔记 安装 apt-get install vim -y 配置说明 vim /etc/vim/vimrc 在配置文件后加入这些配置项 set nu set tabstop=4 set ...

  5. Spring4 事务管理

    Spring4 事务管理 本章是Spring4 教程中的最后一章,也是非常重要的一章.如果说学习IOC是知识的入门,那学习事务管理就是知识的提升.本章篇幅可能有一丢丢长,也有一丢丢难,需要读者细细品味 ...

  6. Win32API起始处的mov edi, edi与用户空间InlineHook

    在x86平台上,无论是在调试器中跟到系统DLL中时,还是反汇编某个系统DLL时,经常会发现很多API的第一条汇编指令都是mov edi, edi.根据经验来讲,C函数的汇编形式,应该是首先push e ...

  7. RAC(ReactiveCocoa)使用方法(二)

    RAC(ReactiveCocoa)使用方法(一) RAC(ReactiveCocoa)使用方法(二) 上篇文章:RAC(ReactiveCocoa)使用方法(一) 中主要介绍了一些RAC中常见类的用 ...

  8. SSH远程连接时间设置

    SSH远程连接时间设置步骤: 1.回到根目录:cd // 2.进入ssh目录:cd etc/ssh 3.编辑sshd_config文件:vi sshd_config 4.按 i 进入编辑状态 5.找到 ...

  9. 尚未解决的selenium 定位

    自从入职以来,一直在写selenium自动化脚本,可是最近因为一个问题止步不前.可是也不能一直原地踏步呀在这里把问题先记录一下,免得以后忘了. 前景: 做一个表单的提交,点击按钮,执行某函数,若表单中 ...

  10. Docker 三剑客之 Docker Swarm

    上一篇:Docker 三剑客之 Docker Compose 阅读目录: Docker Machine 创建 Docker 主机 Docker Swarm 配置集群节点 Docker Service ...