繁体   English   中英

Python 3.x 列表推导 VS 元组生成器

[英]Python 3.x list comprehension VS tuple generator

是否有任何我想使用的内存、速度或其他原因:

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()。它返回一个生成器。 事实上,即使是 5000,xrange() 也往往更快。 注意:xrange() 在 Python 3 中不存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM