Python基础手册15——解析
一、列表解析
列表解析是由方括号括起来的(为了提醒你它们构造了一个列表)。在方括号中编写一个表达式(x + 10),该表达式使用后面 for 循环产生的变量(x)进行运算 ,后边跟着一个for 循环头部的部分,它声明了循环变量(x),以及一个可迭代对象 (L)。Python 之后将这个表达式每次运算的结果收集起来并返回一个新的列表。从技术上讲,列表解析并非真的是必需的,因为我们总是可以通过一个 for 循环手动的构建一个新的列表。但是,列表解析编写起来更加精简,此外列表解析比手动的 for 循环语句运行的更快(往往速度会快一倍),因为它们的迭代在解释器内部是以C语言的速度执行的,而不是以 Python 代码执行。特别是对于较大的数据集合,使用列表解析会有更好的性能。
1、for 循环、map() 调用和列表解析
map() 把一个函数映射遍一个序列,列表解析把一个表达式映射遍一个序列。
对于大部分情况来讲,map() 调用比等效的 for 循环要快两倍,而列表解析往往比map()调用要稍快一些。速度上的差距是来自于底层实现上,map() 和列表解析是在解释器中以C语言的速度来运行的,比Python的 for 循环代码在 PVM 中步进运行要快很多。而且因为 map() 和 列表解析都是表达式,从语法上来说,它们能够在 for 循环语句不能出现的地方使用。
因为 for 循环让逻辑变得清晰,基于简单性我们通常推荐使用。尽管如此,如果应用对于速度特别重视的话,map() 和列表解析作为一种简单的迭代是很容易理解和使用的。
2、在文件上使用列表解析
文件对象有一个 readlines() 方法,它能一次性的把文件载入到行字符串的一个列表中。 对于很多情况来说,换行符是很讨厌的,而且打印的时候会多打印一个空白行。所以当我们需要一次性去除每行末尾的换行符。当我们考虑在一个序列中的每项上都执行一个操作时,都可以考虑使用列表解析。 由于列表解析像 for 循环语句一样是一个迭代环境,我们甚至不必提前打开文件。如果我们在表达式中打开它,列表解析将自动使用在本章前面介绍的迭代协议。3、扩展的列表解析语法
可以在表达式嵌套的 for 循环之后编写一个 if 子句,用来增加选择逻辑,从而过滤那些测试不为真的结果项。实际上在列表解析可以编写任意数量的嵌套的 for循环,每一个子句有一个可选的相关的if子句。 当 for 语句嵌套在列表解析中时,它们工作起来就像等效的嵌套的 for 循环语句。
例如,下面将两个列表拼接成一个列表。4、列表解析和矩阵
使用 Python 编写矩阵(也被成为多维数组)的一个基本的方法就是使用嵌套的列表结构。 列表解析是处理这种结构的强大工具,因为它将自动为我们扫描行和列。 最后我们使用列表解析来混合多个矩阵。列表解析这里只需要一行代码,而且可能对于大型矩阵来说,运行相当快。
二、集合解析和字典解析
1、集合解析和字典解析
集合解析: {f(x) for x in s if p(x)}
字典解析: {key:val for (key, val) in zip(keys, vals)}
注意:是没有元组解析的,我们可能会类推出元组解析的语法, 但是那是生成器表达式,会返回一个生成器对象,而不是元组,对应的概念我们会在后期的章节中详细介绍。
2、扩展的解析语法
集合和字典解析都支持嵌套相关额if子句从结果中过滤掉元素。 嵌套的for循环也是有效的。《Python基础手册》系列:
Python基础手册 1 —— Python语言介绍
Python基础手册 2 —— Python 环境搭建(Linux)
Python基础手册 3 —— Python解释器
Python基础手册 4 —— 文本结构
Python基础手册 5 —— 标识符和关键字
Python基础手册 6 —— 操作符
Python基础手册 7 —— 内建函数
Python基础手册 8 —— Python对象
Python基础手册 9 —— 数字类型
Python基础手册10 —— 序列(字符串)
Python基础手册11 —— 序列(元组&列表)
Python基础手册12 —— 序列(类型操作)
Python基础手册13 —— 映射(字典)
Python基础手册14 —— 集合
Python基础手册15 —— 解析
Python基础手册16 —— 文件
Python基础手册17 —— 简单语句
Python基础手册18 —— 复合语句(流程控制语句)
Python基础手册19 —— 迭代器
Python基础手册20 —— 生成器
Python基础手册21 —— 函数的定义
Python基础手册22 —— 函数的参数
Python基础手册23 —— 函数的调用
Python基础手册24 —— 函数中变量的作用域
Python基础手册25 —— 装饰器
Python基础手册26 —— 错误 & 异常
Python基础手册27 —— 模块
Python基础手册28 —— 模块的高级概念
Python基础手册29 —— 包