Вы уверены, что не путаете вывод (например, ваш код имеет print("S")
и не имеет «WHILE» или «FOR»)?
Можно сделать некоторую очистку, чтобы сделать ваш оригинальный код отличным MVCE :
- , чтобы вы могли получить тот же вывод, что и высделать из кода, и здесь это не тот случай, который добавляет немного путаницы.
- некоторые повторяющиеся коды могут быть опущены
Я добавил кратное число к 9801
, чтобы сделать код более длинным, и в результате на моей машине цикл for
стал быстрее,Не используется timeit()
функция, но результат складывается на многих итерациях.
import time
sp_list = list(range(1,9801*100))
start = 0
bs = 1000
end = start + bs
# experiment 1
now = time.time()
content = []
while sp_list[start:end]:
sp_batch = sp_list[start:end]
for sp in sp_batch:
content.append(sp*sp)
start += bs
end += bs
exp = time.time() - now
# experiment 2
now = time.time()
content = []
for i in range(1, len(sp_list), bs):
content.extend([x*x for x in sp_list[i:i+bs]])
exp2 = time.time() - now
print(exp, exp2)
# 0.2183971405029297 0.12479853630065918
Понимание списка также имеет небольшое преимущество перед циклом:
now = time.time()
content = [x*x for i in range(1, len(sp_list), bs) for x in sp_list[i:i+bs]]
exp3 = time.time() - now
print(exp3)
# 0.09359884262084961