发布于 

生成器执行时间差异

示例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的切片赋值也会有执行时间差异


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 @nnocase 创建,使用 Stellar 作为主题,您可以在 GitHub 找到本站源码。