У меня создалось впечатление, что использование конструкции суммы было намного быстрее, чем запуск цикла 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.
[этот вопрос] (http: // stackoverflow.com/questions/24578896/python-built-in-sum-function-vs-for-loop-performance) говорит, что 'sum' должен быть намного быстрее, чем цикл' for'. – Barmar
Я думаю, что ваше узкое место - это понимание списка, а не дополнение. – Barmar
@Barmar В любой из функций нет понимания списка. Почему должно быть понимание * генератора * узким местом, поскольку оно делает почти то же самое, что и цикл for? Я думаю, что это может быть накладные расходы на вызовы функций 'sum', потому что диапазон настолько мал ... – L3viathan