Python 3.x列表理解与元组发电机



我想使用的记忆,速度或其他任何原因是:

tuple(i for i in range(5000))

而不是:

[i for i in range(5000)]

如果我不介意元组的不变性

基本上列表理解比发电机表达式更快,因为其原因是其迭代在c 中执行(以原因为 @veedrac的评论(。但是,应该在元组中使用发电机表达式的唯一原因是您想对项目执行一些操作和/或过滤它们,更重要的是,您想要一个元组(因为对可变物体的不变性及其益处(。

毕竟,您始终可以timeit您的代码:

In [10]: %timeit tuple(i for i in range(5000))
1000 loops, best of 3: 325 µs per loop
In [11]: %timeit [i for i in range(5000)]
1000 loops, best of 3: 199 µs per loop

还要注意,正如我提到的,如果您要使用综合,则必须在项目上执行操作,否则可以直接在迭代器上调用该功能,该功能更快:

In [12]: %timeit list(range(5000))
10000 loops, best of 3: 98.3 µs per loop

发电机表达式(或简称为 genexps (最适合在循环中用于保存内存时,在处理大量数据时。将GenExp扩展到可相互的数据类型(例如列表,元组,设置(并不是很好的做法。

还要记住,Python 3中的range((就像Python 2中的Xrange((。它返回发电机。实际上,Xrange((甚至对于5000。

最新更新