Python高级特性-列表解析

简介

列表解析是Python是迭代的一种,可以方便的实现for或while循环的功能,且运行速度相比要快的多,本文简要介绍Python列表解析的概念和应用。

列表解析

先来看一个列表解析的简单例子:
Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> L = [1, 2, 3, 4, 5, 6]
>>> L = [x + 10 for x in L]
>>> print L
[11, 12, 13, 14, 15, 16]
>>> 

列表解析写在一个方括号中,因为它们最终是构建一个新的列表的一种方式。它们以所组成的一个任意表达式开始,该表达式组成一个循环变量(x + 10),这之后跟着一个看做是一个for循环头部的部分,它声明了循环变量以及一个可迭代对象(for x in L)。

要运行该表达式,Python解释器执行一个遍历L的迭代,按照顺序把x赋值给每个元素,并且收集对各元素运行左边的表达式的结果。得到的结果列表就是列表解析所表达的内容。

优点:列表解析比手动的for循环语句运行快,因为它们的迭代在解释器内部是以C语言的速度执行的,而不是以手动Python代码执行的,特别是对于较大的数据集合,这是列表推导的一个主要的性能优点。

高级应用

实际上,列表解析可以有更高级的应用,作为一个特别有用的扩展,表达式嵌套的for循环可以有一个相关的if子句,来过滤那些测试不为真的结果项。我们这这里将上面例子中的计算结果中列表元素为偶数挑选处理,并将其其平方值组成列表:

>>> L = [x ** 2 for x in L if x % 2 == 0]
>>> print L
[144, 196, 256]
也可以对列表元素直接调用函数处理:
>>> res = [ord(x) for x in ‘spam’]
>>> res
[115, 112, 97, 109]

通用的列表解析结构如下所示:
[ expression for target1 in iterable1 [if condition1]
          for target1 in iterable2 [ifcondition2] ...... ]

总结

列表解析是执行常见for循环任务的简明并且高效的方法:对可迭代对象内所有元素应用一个表达式,并收集结果。可以把列表解析转换为for循环,而列表解析表达式的一部分的语法看起来就像for循环的首行。但列表解析的运行速度要比for循环快的多。
本质上列表解析应用了Python中的迭代协议,具体深层的概念,请参考迭代协议相关的高级特性说明。

你可能感兴趣的:(Python,python,列表)