我要翻译的内容是:“有没有任何关于内存、速度或其他方面的原因,让我想要使用以下选项:”
tuple(i for i in range(5000))
替代:
[i for i in range(5000)]
如果我不在意元组的不可变性
我要翻译的内容是:“有没有任何关于内存、速度或其他方面的原因,让我想要使用以下选项:”
tuple(i for i in range(5000))
替代:
[i for i in range(5000)]
如果我不在意元组的不可变性
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()往往也更快。注意:Python 3中不存在xrange()。
list(range(5000))
)。 - vaultahtuple
还是list
取决于你打算用它来做什么,而不是资源。 - Ma0tuple(range(5000))
和list(range(5000))
,或者根据您的需求,只使用range(5000)
。 - Eric Duminil