我的印象是使用總和構造比運行for循環要快得多。然而,在下面的代碼中,for循環實際運行速度更快:Python中「總和」理解的速度
import time
Score = [[3,4,5,6,7,8] for i in range(40)]
a=[0,1,2,3,4,5,4,5,2,1,3,0,5,1,0,3,4,2,2,4,4,5,1,2,5,4,3,2,0,1,1,0,2,0,0,0,1,3,2,1]
def ver1():
for i in range(100000):
total = 0
for j in range(40):
total+=Score[j][a[j]]
print (total)
def ver2():
for i in range(100000):
total = sum(Score[j][a[j]] for j in range(40))
print (total)
t0 = time.time()
ver1()
t1 = time.time()
ver2()
t2 = time.time()
print("Version 1 time: ", t1-t0)
print("Version 2 time: ", t2-t1)
輸出是:
208
208
Version 1 time: 0.9300529956817627
Version 2 time: 1.066061019897461
難道我做錯了什麼?有沒有辦法做得更快?
(請注意,這只是一個演示中,我設置了,在我的實際應用中的成績將不會以這種方式重複)
一些附加信息:這是關於Python 3.4.4 64位運行,在Windows 7 64位上,在i7上。
[this question](http:// stackoverflow。com/questions/24578896/python-built-in-sum-function-vs-for-loop-performance)說'sum'應該比'for'循環快得多。 – Barmar
我認爲你的瓶頸是列表理解,而不是加法。 – Barmar
@Barmar在這兩個函數中都沒有列表理解。爲什麼一個*生成器理解*是一個瓶頸,因爲它和for循環完全相同?我認爲這可能只是函數調用'sum'的開銷,因爲範圍非常小... – L3viathan