我有以下代码:
[x ** 2 for x in range(10)]
Run Code Online (Sandbox Code Playgroud)
当我在Python Shell中运行它时,它返回:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Run Code Online (Sandbox Code Playgroud)
我搜索过,似乎这被称为列表理解,但它是如何工作的?
我在Windows上使用Python 3.3.1 64位和此代码片段:
len ([None for n in range (1, 1000000) if n%3 == 1])
Run Code Online (Sandbox Code Playgroud)
与此相比,执行时间为136毫秒:
sum (1 for n in range (1, 1000000) if n%3 == 1)
Run Code Online (Sandbox Code Playgroud)
在146ms执行.在这种情况下,生成器表达式不应该比列表理解更快或更快吗?
我引用了Guido van Rossum 从列表理解到生成器表达式:
... Python 3中的列表推导和生成器表达式实际上比它们在Python 2中更快!(并且两者之间不再存在速度差异.)
编辑:
我测量了时间timeit.我知道它不是很准确,但我只关心这里的相对速度,当我用不同的迭代次数测试时,我的列表理解版本的时间总是缩短.