



列表推导式本质上是一种创建并填充列表的方法,是使用最广泛的推导式。其结构如下:
EXPRESSION可以是任何Python表达式,表达式通常包含变量。变量位于VARIABLE字段。SEQUENCE定义了迭代变量的数据源,用于计算并创建最终的序列。
再观察本章开头的示例:
注意,结果是一个普通列表。在squares中,表达式为n*n,变量为n,序列源是range(6)。序列是range对象,也可以是任何可迭代对象,比如列表或元组、生成器对象或其他类型。
表达式部分可以是任何计算后能得到数值的代码,比如:
●算术表达式如n+3。
●函数如f(m),使用m作为变量。
●切片操作(如使用s[::-1]翻转字符串)。
●方法调用。
完整的示例如下:
注意,以上列表推导式都符合同样的结构。它们都使用了关键字for和in,二者是Python推导式所必需的。关键字for和in出现在三个字段之间,即表达式、变量(构成表达式的标识符)和序列源。
最终列表中的元素顺序与序列源相同。通过添加if语句,还可以筛选元素:
结构如下:
其中,当满足CONDITION(条件)时,表达式会求值为True或False
。注意,条件可以是应用于变量的函数(如is_palindrome(word)),或是更复杂的表达式。使用函数可以提高可读性,并且支持复杂的过滤逻辑,逻辑代码可能无法用单行完成。
列表推导式必须使用for关键字,即使初始表达式仅仅是变量自身。例如:
有时,人们可能认为word for word in words多余(确实如此),并试图简化,但这会引发错误: