擅长:python、mysql、java
<p>最好的方法是只使用带有<code>sum</code>的生成器表达式</p>
<pre><code>return sum(distance(location, location+1) for location in route)
</code></pre>
<p>这节省了创建列表的开销。
totalDistance=[距离(位置,位置+1)表示路线中的位置]</p>
<p><code>for</code>循环版本也不会创建列表。很好,只是和使用<code>sum</code>相比有点冗长。<code>sum</code>正是在这种情况下存在的</p>
<p><code>location+1</code>是如何工作的?好像是route的下一个项目</p>
<hr/>
<p>出于兴趣,我比较了pypy2.2.1中的@iCodez示例。每个函数的第一次运行是允许JIT编译函数</p>
<pre><code>>>>> from timeit import timeit
>>>> def f():
.... number = 0
.... for i in range(100):
.... number += 1
....
>>>> timeit(f)
0.3245859146118164
>>>> timeit(f)
0.2913198471069336
>>>> def g():
.... lst = [i for i in range(100)]
.... sum(lst)
....
>>>> timeit(g)
0.8840188980102539
>>>> timeit(g)
0.8698201179504395
>>>> def h():
.... sum(i for i in range(100))
....
>>>> timeit(h)
2.8281970024108887
>>>> timeit(h)
2.8702847957611084
</code></pre>
<p>哇..genexp的性能差多了</p>