Понимание списка более чем в два раза быстрее, чем явный цикл. Основываясь на вариации Бена Джеймса, но заменив x ** 2 более тривиальной функцией x + 2, две альтернативы:
def foo(n):
L = []
for x in xrange(n):
L.append(x+2)
return L
def bar(n):
return [x+2 for x in xrange(n)]
Результат синхронизации:
In [674]: timeit foo(1000)
10000 loops, best of 3: 195 us per loop
In [675]: timeit bar(1000)
10000 loops, best of 3: 81.7 us per loop
Список понимания побеждает с большим отрывом.
Я согласен, что удобочитаемость должна быть приоритетом перед оптимизацией производительности. Однако читаемость в глазах смотрящего. Когда я впервые изучаю Python, понимание списка - это странная вещь, которую мне трудно понять! : -O Но как только я привык к этому, это становится действительно хорошей записью короткой руки. Если вы хотите стать опытным в Python, вы должны освоить понимание списка.