什么是列表解析?
即生成列表的表达式
fives = []
for x in range(50):
if x % 5 == 0:
fives.append(x)
print(fives)
#fives [0, 5, 10, 15, 20, 25, 30, 35, 40, 45]
%为取余符号,x%5==0 也就是取x可以被5整除的数。利用range()和for循环,我们生成了一个fives的列表,包含了50以内可以被5整除的数。下面我们以更简单的方式列出。
fives = [x for x in range(50) if x%5 == 0]
#fives [0, 5, 10, 15, 20, 25, 30, 35, 40, 45]
这段代码产生的结果和上述的相同,但是它显得更简洁。有优点也会有缺点,它的缺点就是运行一次会生成整个列表,如果数据足够大,这样就会造成占据很大的内存空间。
fives = (x for x in range(50) if x%5 == 0)
print(fives)
输出:<generator object <genexpr> at 0x02BB7E90>
为了优化列表解析占用内存空间的问题,可以使用上述的方式,我们注意到方括号编程了圆括号,输出的结果由列表变成了生成器.我们可以这么遍历它:
for x in (x for x in range(50) if x%5 == 0):
print(x,end=" ")
输出:0 5 10 15 20 25 30 35 40 45
那么生成器有什么好处呢?也就是在需要的时候才产生结果,而不是立即产生结果。详情请移步:https://www.zhihu.com/question/24807364
那么我们可以回答一下几个问题:
1,列表解析是什么,为什么要使用列表解析?
2,列表解析的缺点?如何优化这个缺点?
列表解析就是生成列表的方式,因为它更简洁。缺点就是一次会生成整个列表,对于数据量足够大的话,就会造成内存占用过大,解决的方法是用()替换[],这种方式并不是列表解析,产生的结果已然不是列表,而是生成器。而生成器可以保证用到的时候才会产生相对应的结果