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 —— 包

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,422评论 0 4
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,376评论 25 707
  • 多年以后,我们已经不会再说缅怀的话,也写不出细腻的文字。其实,我们都将青春当做一种信仰来看待。 我认识你,永远记得...
    7色流年阅读 249评论 0 0
  • 总想着要写点什么,以前不是很会写吗?什么生活的悲欢离合总是有自己的见识,而今让我再次提笔哪怕是打键盘都挤不出一点墨...
    署名X阅读 122评论 0 0
  • 人与人之间的相互吸引,无论是友情还是爱情,看似命运让我们相遇,看似疯狂和不顾一切,但其实背后存在着一定的规律和理性...
    大河小河与一条魚的传奇阅读 3,014评论 5 31