描述
列表解析在一个序列的值上应用一个任意的表达式,将其结果收集到一个新的列表中并返回。从语法上说,列表解析是由方括号封装起来的(为了提醒你它们构造了一个列表)
语法
[expression for target1 in iterable1 [if condition1]
target2 in iterable2 [if condition2] ...
targetN in iterableN [if conditionN] ]
参数
expression : 运算表达式
target:迭代元素
iterable:迭代器对象
condition:条件表达式
返回值
一个列表
示例
示例1
[x for x in range(5) if x%2==0]
输出的结果为
[0, 2, 4]
示例2
[(x , y) for x in range(5) if x % 2 == 0 for y in range(5) if y % 2 == 1]
输出结果为:
[(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
与for的比较
任何一个列表解析都可以转换成for循环,这里测试两者的计算速度
for循环表达式
import time
start = time.time()
res = []
for x in range(5):
if x % 2 == 0:
for y in range(5):
if y % 2 == 1:
res.append((x , y))
end = time.time()
print('Time of use {:.8f}s'.format(end-start))
输出的结果为
Time of use 0.00049996s
列表解析的表达式
import time
start = time.time()
res = [(x , y) for x in range(5) if x % 2 == 0 for y in range(5) if y % 2 == 1]
end = time.time()
print('Time of use {:.8f}s'.format(end-start))
输出的结果为
Time of use 0.0000000000s
可以看到,列表解析的速度快很多。