Budulianin
Вообще-то генератор списков это просто “синтаксический сахар” и по реализации ничем не отличается, от обычного for. Следовательно он работает с такой же скоростью.
Поправочка, чтобы никого в заблуждение не вводить.
Из Лутца:
“генераторы списков могут выполняться значительно быстрее (зачастую почти в два раза), чем
инструкции циклов for, потому что итерации выполняются со скоростью
языка С, а не со скоростью программного кода на языке Python. Такое преимущество в скорости особенно важно для больших объемов данных.”
Проверяем:
def func1():
lst = [x for x in range(10000)]
def func2():
lst = []
for x in range(10000):
lst.append(x)
t1 = timeit.Timer(func1, 'from __main__ import func1')
t2 = timeit.Timer(func2, 'from __main__ import func2')
t1.repeat(3, 1000)
[1.3615523760017822, 1.1045241789979627, 1.1151962050025759]
t2.repeat(3, 1000)
[2.1324967270011257, 2.1218632529999013, 2.120350769997458]