生成器执行时间差异
示例1 生成器(有if)
array = [1, 3, 9] g = (i for i in array if array.count(i) > 0 ) array = [2, 3, 10] list(g)
[3]
|
如果只看前两行,list(g)肯定输出为 [1, 3, 9],因为三个元素都满足条件
但为什么给array重新赋值后,list(g)输出的是[3]呢?
因为:在生成器表达式中,in子句在声明时执行,而if字句在运行时执行由于第三行在运行前,
array已经被重新赋值为[2, 3, 10], 运行时if array.count的array的值已经是[2, 3, 10]
所以:(i for i in [1, 3, 9] if [2, 3, 10].count(i) > 0) 最后只有3符合, list(g) == [3]
示例2 列表生成式(无if)
array = [1, 3, 9] g = [i for i in array] array = [2, 3, 10] g
[1, 3, 9]
|
示例3 列表生成式(有if)
array = [1, 3, 9] g = [i for i in array if array.count(i) > 0] array = [2, 3, 10] print(g)
[1, 3, 9]
|
在列表生成式里没有体现执行时间差异
示例4 切片
array = [1, 3, 9] g = (i for i in array) array[:] = [2, 3, 10] list(g)
[2, 3, 10]
|
对array的切片赋值也会有执行时间差异