Почему list comprehension в Python быстрее цикла for?

«Почему list comprehension в Python быстрее цикла for?» — вопрос из категории Python, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

List comprehension в Python работает быстрее обычного цикла for при создании списков по нескольким причинам:

  1. Оптимизация на уровне байт-кода: Python компилирует list comprehension в более эффективный байт-код. Это позволяет избежать накладных расходов, связанных с вызовом метода append() на каждой итерации, который в цикле for требует поиска метода и его вызова.
  2. Меньше операций: В list comprehension элементы добавляются напрямую, что сокращает количество внутренних операций по сравнению с многократным вызовом append().
  3. Предварительное выделение памяти: Интерпретатор может более эффективно предсказать и выделить необходимый объем памяти для списка при использовании list comprehension, что потенциально уменьшает количество операций по изменению размера списка.

Пример сравнения:

# Медленнее: цикл for с append()
result_for = []
for i in range(1000):
    result_for.append(i * 2)

# Быстрее: list comprehension
result_lc = [i * 2 for i in range(1000)]

Разница в производительности особенно заметна на больших объемах данных. Однако для сложной логики или операций с побочными эффектами обычный цикл for может быть более читаемым и подходящим.