擅长:python、mysql、java
<p>下面是一个小基准,让问题更有趣:</p>
<pre><code>import timeit
import random
N = 1000000
class Foo:
def __init__(self):
self.n = random.randint(0, 1000)
bar = [Foo() for r in xrange(N)]
def f1(lst):
return [v for v in lst]
def f2(lst):
return [v for index, v in enumerate(lst)]
def f3(lst):
return [lst[i] for i in range(len(lst))]
K = 100
print timeit.timeit('f1(bar)', setup='from __main__ import f1, bar', number=K)
print timeit.timeit('f2(bar)', setup='from __main__ import f2, bar', number=K)
print timeit.timeit('f3(bar)', setup='from __main__ import f3, bar', number=K)
</code></pre>
<p>在我的机器里有:</p>
^{pr2}$
<p>结论:使用习惯用法<code>for v in huge_list</code>进行迭代是一个非常好的选择,因此您应该分析一下瓶颈在哪里,这可能是在内部循环(项处理)中</p>