相关疑难解决方法(0)

"列表理解"是什么意思?它是如何工作的,我该如何使用它?

我有以下代码:

[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)

我搜索过,似乎这被称为列表理解,但它是如何工作的?

python list-comprehension list

46
推荐指数
4
解决办法
4792
查看次数

为什么这个列表理解比等效的生成器表达更快?

我在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.我知道它不是很准确,但我只关心这里的相对速度,当我用不同的迭代次数测试时,我的列表理解版本的时间总是缩短.

python list-comprehension generator-expression python-3.x

5
推荐指数
1
解决办法
1583
查看次数