Статья

Python: генераторы списков

5 сентября 2026~8 минут10–11 класс

«Python: генераторы списков» — тема, где важно не заучивание, а аккуратность. Показываем по шагам: определения, разбор типового задания, оформление ответа и критерии.

Что такое генераторы списков в Python

Если обычная программа заставляет тебя писать длинный цикл ради простого списка чисел, код быстро становится похож на черновик с повторениями. Генератор списков помогает записать ту же идею короче: описать, какие элементы нужно получить и по какому правилу. В результате ты быстрее решаешь задачи по математике, работаешь с последовательностями и лучше понимаешь алгоритмы. После разбора можно сразу перейти в личный кабинет для бесплатной практики и проверить себя на коротких заданиях.

Генератор списка, или list comprehension, создаёт новый список на основе другого объекта: диапазона чисел, строки, готового списка. Его удобно читать как фразу: «взять элемент из последовательности и добавить его в список». Общая форма выглядит так:

[выражение for элемент in последовательность]

Например, нам нужны квадраты чисел от 1 до 5. Выражением будет элемент · элемент, а последовательностью — range(1, 6). Важно: range(1, 6) включает 1, но не включает 6.

Как работает запись по шагам

Разберём генератор изнутри. Сначала Python получает очередной элемент последовательности. Затем подставляет его в выражение. Получившийся результат добавляется в новый список. Процесс повторяется, пока последовательность не закончится.

[x² for x in range(1, 6)]
\( \to x = 1 \to 1^2 \)
\( \to x = 2 \to 2^2 \)
\( \to x = 3 \to 3^2 \)
\( \to x = 4 \to 4^2 \)
\( \to x = 5 \to 5^2 \)
→ [1, 4, 9, 16, 25]

Слева от for находится результат, который попадёт в список. После for указывается переменная цикла, затем in и источник данных. Переменная x существует только внутри этого выражения, поэтому её имя можно выбрать самостоятельно: number, value или item.

Ту же задачу можно решить обычным циклом. Генератор не меняет математический смысл вычислений, а делает короткую запись более компактной. Но компактность не должна мешать пониманию: если выражение слишком сложное, лучше использовать несколько понятных строк.

Совет репетитора

Прочитай генератор слева направо и задай три вопроса: откуда берём элементы, что вычисляем, сколько раз повторяем. Такой алгоритм помогает не путать порядок частей записи.

Условие и фильтрация элементов

Генератор может не только преобразовывать все элементы, но и выбирать подходящие. Для этого после последовательности добавляют условие if:

[выражение for элемент in последовательность if условие]

Например, найдём чётные числа от 1 до 10. Число является чётным, если остаток от деления на 2 равен нулю. В Python остаток обозначается оператором %.

\( [x for x in range(1, 11) if x \% 2 == 0] \)
→ [2, 4, 6, 8, 10]

Здесь в итоговый список попадает сам x, но только тогда, когда условие x % 2 == 0 истинно. Можно одновременно фильтровать и преобразовывать элементы:

\( [x^2 for x in range(1, 11) if x \% 2 == 0] \)
→ [4, 16, 36, 64, 100]

Не путай знак сравнения == с одиночным =. Первый проверяет равенство, второй присваивает значение переменной.

Разобранный пример и полезные приёмы

Задача: из списка температур выбрать значения не ниже нуля и перевести их из градусов Цельсия в условные единицы по формуле y = t × 2 + 3. Нужно получить новый список.

\( temperatures = [-4, 0, 5, 12] \)
\( result = [t \times 2 + 3 for t in temperatures if t \ge 0] \)
print(result)
→ [3, 13, 27]

В реальном Python для умножения используется символ *, а для сравнения — >=. Запись с Unicode выше показывает математическую идею, а рабочий вариант будет таким:

\( temperatures = [-4, 0, 5, 12] \)
\( result = [t * 2 + 3 for t in temperatures if t >= 0] \)
print(result)
→ [3, 13, 27]

Сначала цикл проверяет -4 и отбрасывает его. Затем берёт 0: условие подходит, поэтому вычисляет 0 × 2 + 3 = 3. Для 5 получает 13, для 12 — 27. Полезно помнить: условие фильтрует исходное значение t, а выражение формирует итоговый элемент.

Для строк работает тот же принцип: [word.upper() for word in words] создаёт список слов в верхнем регистре.

Типичные ошибки и проверка результата

Первая ошибка — перепутать порядок частей. Запись [for x in numbers x²] неверна: выражение должно стоять перед for, а условие — после if. Вторая ошибка — забыть квадратные скобки. Именно они показывают, что создаётся список.

Третья проблема связана с range. Вызов range(1, 5) даёт 1, 2, 3, 4, но не 5. Перед решением выпиши границы отдельно и проверь количество элементов. Четвёртая ошибка — ожидать, что исходный список изменится. Генератор создаёт новый объект, поэтому результат нужно сохранить в переменную или вывести.

ЗадачаГенераторРезультат
Квадраты[x * x for x in range(1, 4)][1, 4, 9]
Нечётные[x for x in range(6) if x % 2 != 0][1, 3, 5]
Длины слов[len(word) for word in words]числа длин

Если запись трудно проверить, временно разверни её в обычный цикл. А затем можешь закрепить тему через бесплатную практику в личном кабинете.

Ловушка

Не называй генератор списка обычным генератором Python: list comprehension сразу создаёт список, а функция с yield выдаёт значения постепенно. Эти конструкции связаны идеей перебора, но работают по-разному.

Что запомнить

Генератор списка — компактная запись для создания нового списка. Базовый шаблон: [выражение for элемент in последовательность]. Выражение отвечает за результат, for запускает перебор, in указывает источник. Условие if после последовательности оставляет только подходящие элементы.

Всегда проверяй границы range, разницу между = и ==, а также символ умножения в настоящем Python: *. Если формула сложная, сначала реши задачу обычным циклом, затем сократи запись. Для математических задач генераторы особенно удобны при построении квадратов, фильтрации чётных чисел и обработке таблиц значений.

Следующий шаг — зарегистрируйся и реши 5 заданий бесплатно: составь список квадратов, выбери числа по условию и сравни генератор с обычным циклом.

Что такое генератор списка?

Это выражение в квадратных скобках, которое создаёт новый список на основе последовательности и заданного правила.

Можно ли использовать условие?

Да. Условие добавляют после части for, например [x for x in numbers if x >= 0].

Чем генератор списка отличается от цикла?

Он выполняет ту же идею перебора, но записывается компактнее и сразу формирует список.

Как закрепить тему после разбора?

Реши несколько задач: создай список квадратов, отфильтруй чётные числа и преобразуй элементы по формуле. Затем разверни один пример в обычный цикл и сравни записи.

Закрепить тему на практике

Теория без практики забывается за неделю. В личном кабинете Просто Урок — задания именно по этой теме с проверкой каждого шага. Регистрация бесплатная.

Важно. Материалы сайта носят информационно-образовательный характер и не являются публичной офертой (ст. 437 ГК РФ), индивидуальной консультацией или руководством к действию. Мы аккуратно работаем с фактами, но не гарантируем полную точность и актуальность: структура и правила экзаменов могут меняться — сверяйтесь с официальными источниками (ФИПИ, действующие кодификаторы и нормативные акты РФ). Администрация сайта не несёт ответственности за возможные неточности и за решения, принятые на основе материалов. Заметили неточность — напишите нам, мы исправим.