列表推导式是 中一种非常强大的语法结构,它提供了一种简明扼要的方法来创建列表。 列表推导式通过将循环和条件判断结合,避免了冗长的代码。
下面是一个列表推导式,表示我们希望将列表 中的每个元素加上1:
>>> [x+1 for x in [10,20,30]]
[11,21,31]
类似地,我们可以用以下列表推导式将列表 中的每个元素变为自身的3倍:
>>> [x*3 for x in [10,14,41]]
[30,42,123]
一般来说,列表推导式使用以下语法:
其中 是任意一个输入函数或表达式,而 通常是一个列表。(但是, 也可以是字符串。)请注意, 与 相同,同样是将函数 映射到列表 中的每个元素 上。
>>> [len(s) for s in ['I','like', 'spam'] ]
[1,4,4]
这和使用 函数一样
>>> list(map(len, ['I','like',spam'] ) )
[1,4,4]
函数得到的是一个可迭代对象,需要用 将其展开。
通过在表达式的末尾添加 和布尔值测试,列表推导式还具有 函数的功能。例如:
>>> words =['oh', 'darn', wow', 'spam', 'ugh']
>>> [x for x in words if len(x)== 4]
['darn', 'spam']
在这个例子中,我们定义了列表 来说明原始列表不必是匿名的。无论是否命名,列表推导式都一样:
>>>[x for x in ['oh', 'darn', 'wow', 'spam', 'ugh']if len(x)== 4]
[ 'darn', 'spam']
这就相当于一个循环表达式内嵌一个 结构:
words =['oh', 'darn', wow', 'spam', 'ugh']
for x in words:
if len(x)== 4:
print(x)
因此,我们自然会想到这样的写法:
>>>[x[1:3] for x in ['oh', 'darn', 'wow', 'spam', 'ugh']if len(x)== 4]
[ 'ar', 'pa']
一般来说,为列表推导式添加 的语法为:
其中 是一个函数, 是一个列表,在省略号 位置出现的是一个谓词表达式,其值为 或 。其结果是一个 值的列表,仅针对谓词表达式为 的那些 值。你选择组合使用 、 和 ,还是使用列表推导式,更多的是因为偏好,而不是因为它们能力不同。
在线性互补算法的 代码使用了列表推导式。