Почему for i in range(n): a.append(i) лучше переписать в comprehension?
Наполняю список в цикле через append. Постоянно слышу, что так не делают и надо list comprehension. Это просто вкусовщина или есть реальная разница?
3 ответа
Разница есть, и не только в стиле.
# было
a = []
for i in range(n):
a.append(i * i)
# стало
a = [i * i for i in range(n)]
Comprehension быстрее (append вызывается как метод на каждом шаге — это накладные расходы, у включения цикл крутится на уровне интерпретатора оптимальнее), короче и читается как «список квадратов от 0 до n». Плюс намерение видно сразу: «строю новый список», тогда как цикл с append приходится дочитывать до конца, чтобы понять, что он только наполняет.
Но не тащи в comprehension всё подряд. Если внутри побочные эффекты (print, запись в файл) или логика на несколько строк с вложенными условиями — обычный цикл честнее. Comprehension хорош именно для «собрать список из значений».
Для этого конкретного примера вообще a = list(range(n)).