相关阅读
Python专栏https://blog.csdn.net/weixin_45791458/category_12403403.html?spm=1001.2014.3001.5482
列表推导式使得创建特定列表的方式更简洁。常见的用法为,对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表;或用满足特定条件的元素创建子序列。
例如,创建平方值的列表:
squares = []
for x in range(10):
squares.append(x**2)
print(squares)
print(x)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
9
注意,这段代码创建(或覆盖)变量 x
,该变量在循环结束后仍然存在,可以从代码中看到x的最终值是9。
下述方法可以无副作用地计算平方列表,使用了lambda表达式和map函数:
squares = list(map(lambda x: x**2, range(10)))
或者可以更简洁和易读地使用列表推导式:
squares = [x**2 for x in range(10)]
列表推导式的方括号内包含以下内容:一个表达式,后面为一个 for子句,然后,是零个或多个 for 或 if
子句。结果是由表达式依据 for
和 if
子句求值计算而得出一个新列表。 举例来说,以下列表推导式将两个列表中不相等的元素组合起来:
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
以上的复合列表推导式等价于:
combs = []
for x in [1,2,3]:
for y in [3,1,4]:
if x != y:
combs.append((x, y))
注意,上面两段代码中,for 和 if 的顺序相同。
表达式是元组(例如上例的(x, y))或列表(例如[x, y])时,必须加上括号,即以下语句会报错。
[x, x**2 for x in range(6)] #错误用法
SyntaxError: did you forget parentheses around the comprehension target?
[(x, x**2) for x in range(6)] #正确用法
[[x, x**2] for x in range(6)] #正确用法