<p>为了进一步扩展另外两个人的答案:</p>
<p>你对迭代器有误解。但你称之为“缓慢的创造时间”,然后你寻找一个“更快的容器”,因为你的误解。在</p>
<p>请注意,在python中创建list对象的速度很快:</p>
<pre><code>%timeit list(range(10000))
10000 loops, best of 3: 164 µs per loop
</code></pre>
<p>您所体验到的缓慢是您需要执行的实际循环,计算需要进入列表的值。在</p>
<p>请参阅一个非常未优化的示例,它缓慢地“创建”另一个列表的新列表:</p>
^{pr2}$
<p>所花费的时间实际上是在循环上,这在python中是“慢”的。在</p>
<p>这实际上就是你在这里所做的,如果你比较一下:</p>
<pre><code>def your_loop(x):
return list(map(lambda y: y**2, x))
%timeit your_loop(x)
100 loops, best of 3: 4.5 ms per loop
</code></pre>
<p>但有一种方法可以加快速度:</p>
<pre><code>def faster_loop(x):
return [i**2 for i in x]
%timeit faster_loop(x)
100 loops, best of 3: 3.67 ms per loop
</code></pre>
<p>虽然这类功能不多。问题是:这里慢的部分是数学,而不是列表和容器。你可以用numpy来证明这一点</p>
<pre><code>arr = np.array(x)
%timeit arr ** 2
100000 loops, best of 3: 7.44 µs per loop
</code></pre>
<p>哇哦。。。疯狂加速。在</p>
<p>有了基准测试——我发现我自己也经常为此感到内疚——人们经常怀疑这个系统,但他们自己却常常不够。所以,python并不是没有经过优化或“慢”,只是你做错了。不要怀疑python列表的效率。怀疑你的慢,低效的代码。你可能会更快地把它弄好。。。在</p>
<p>在这里,纯python**运算符似乎非常慢,因为它是一个简单的乘法运算
速度更快:</p>
<pre><code>def faster_loop2(x):
return [i * i for i in x]
%timeit faster_loop2(x)
1000 loops, best of 3: 534 µs per loop
</code></pre>