Подтвердить что ты не робот

В чем преимущество понимания списка по циклу for?

В чем преимущество использования понимания списка в цикле for в Python?

Является ли это главным образом для того, чтобы сделать его более понятным для человека или есть другие причины использовать понимание списка вместо цикла?

4b9b3361

Ответ 1

Перечисления списков более компактны и быстрее, чем явные for цикла построения списка:

def slower():
    result = []
    for elem in some_iterable:
        result.append(elem)
    return result

def faster():
    return [elem for elem in some_iterable]

Это связано с тем, что вызов .append() в list заставляет объект списка расти (в кусках), чтобы сделать пространство для новых элементов индивидуально, в то время как понимание списка собирает все элементы перед созданием list чтобы он соответствовал элементам за один раз:

>>> some_iterable = range(1000)
>>> import timeit
>>> timeit.timeit('f()', 'from __main__ import slower as f', number=10000)
1.4456570148468018
>>> timeit.timeit('f()', 'from __main__ import faster as f', number=10000)
0.49323201179504395

Однако это не значит, что вы должны начинать пользоваться списками для всего! Понимание списка по-прежнему будет создавать объект списка; если вы используете понимание списка только потому, что оно дает вам однострочный цикл, подумайте еще раз. Вероятно, вы тратите впустую циклы, создавая объект списка, который вы затем отбрасываете. Просто придерживаться нормальной for цикла в этом случае.