Введение

В этой части продолжим работу со списками и научимся создавать их с помощью генератора.

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

Генераторы списков (списочные выражения)

Генераторы списков в Python — это компактный и эффективный способ создания новых списков. Они представляют собой сокращённую запись цикла for с возможностью добавления условного оператора if, всё это заключено в одной строке кода. Это делает код более читаемым и часто более быстрым, чем использование традиционных циклов for для простых задач создания списков.

Забирай курсы подготовки к ОГЭ и ЕГЭ с жирной скидкой

Структура

новый_список = [выражение for элемент in итерируемый_объект]

Где новый_список — имя списка,

выражение — элемент, который будет занесён в список, вместо него может быть написано выражение, которое вычисляет значение для списка по определённой формуле,

for элемент in итерируемый_объект — конструкция обычного цикла for, определяет, какое количество элементов будет занесено в список, при этом выражение может не зависеть от элемент вовсе.

a = [x for x in range(5)]

print(a) # [0, 1, 2, 3, 4]

Здесь добавляется в список элемент x, который принимает значение из диапазона от 0 до 4.
Аналогично этот код можно было бы переписать так:
a = []

for x in range(5):

a.append(x)

print(a) # [0, 1, 2, 3, 4]

Генератор списка позволяет упрощать код и делать его компактнее.

Вместо добавления элемента из итерируемого объекта можно написать выражение, содержащее формулу:

a = [x**2 for x in range(5)]

print(a) # [0, 1, 4, 9, 16]

Этот код добавляет в список квадраты чисел из итерируемого объекта.

Генератор с условием

Функционал списочного выражения можно расширить, добавив к нему условие, при выполнении которого элемент будет добавляться.

Для этого после основной конструкции с циклом нужно написать if условие:

новый_список = [выражение for элемент in итерируемый_объект if условие]

К примеру, ты хочешь из исходного списка создать новый, в котором будут только чётные числа.

a = [1, 2, 3, 4, 5, 6, 7, 8]

b = [x for x in a if x % 2 == 0]

print(b) # [2, 4, 6, 8]

Мы указали, что добавляем только такие x из a, которые являются чётными числами.

Или вот как можно определить, сколько в списке отрицательных чисел:

a = [–1, 0, 1, –2, –3, 5, –9]

b = [x for x in a if x < 0] print(len(b)) # 4 c = [1 for x in a if x < 0] print(sum(c)) # 4 print(len(c)) # 4 d = [x < 0 for x in a] print(sum(d)) # 4

В списке c мы добавляли 1 каждый раз, когда встречали отрицательное число x, это пример ещё одной вариации записи выражения в генераторе.

В списке d выражение возвращало булевый тип данных – ложь или правду, но так как в Питоне True == 1 и False == 0, то сумма элементов будет равна количеству отрицательных чисел.

Поздравляю с освоением ещё одного полезного инструмента для написания собственных программ! Чтобы закрепить навык, предлагаю тебе решить следующие задачи с использованием генератора.

Реши задачи

Задача 1: список квадратов.

Программа запрашивает число N. Создайте список квадратов чисел от 1 до N включительно, используя генератор списка. Выведите полученный список.

N = int(input())

squares = [i * i for i in range(1, N + 1)]

print(squares)

Задача 2: чётные числа в диапазоне.

Даны два числа A и B (A ≤ B). Создайте список всех чётных чисел от A до B включительно с помощью генератора списка. Выведите список.

A = int(input())

B = int(input())

even_numbers = [num for num in range(A, B + 1) if num % 2 == 0]

print(even_numbers)

Задача 3: сумма цифр чисел.

Программа запрашивает число K. Создайте список сумм цифр для каждого числа от 1 до K, используя генератор списка. Для подсчёта суммы цифр создайте вспомогательную функцию или используйте sum() со строковым представлением числа. Выведите результат.

K = int(input())

digit_sums = [sum(map(int, str(num))) for num in range(1, K + 1)]

print(digit_sums)

Задача 4: произведение пар чисел.

Дано число N. Создайте список, где каждый элемент равен произведению номера итерации (от 1 до N) на само это число. Используйте генератор списка. Выведите список.

N = int(input())

products = [i * (i + 1) for i in range(N)]

print(products)

Задача 5: список остатков от деления.

Программа запрашивает два числа: X и Y (Y > 0).

Создайте с помощью генератора списка список остатков от деления каждого числа от 0 до X на Y.

Выведите полученный список.

X = int(input())

Y = int(input())

remainders = [num % Y for num in range(X + 1)]

print(remainders)

Автор:

Быкова Оксана, методист «100балльного репетитора» по информатике ЕГЭ

Забирай курсы подготовки к ОГЭ и ЕГЭ с жирной скидкой

В 100б ты пробьёшь свой
максимум на экзаменах

наши лучшие курсы

Выбери подходящий курс и предмет, чтобы прокачаться и сдать ОГЭ на «5», а ЕГЭ на 80+ баллов

Выбрать курс

бесплатные материалы

Курсы, вебы, чек-листы — всё за 0 ₽

Забрать за 0 ₽

Интенсив по поступлению

Запишись на интенсив по поступлению, чтобы
взять из ЕГЭ максимум и попасть в вуз мечты

Записаться
В 100балльном репетиторе ты пробьёшь свой максимум на экзаменах

Преимущества подготовки
в 100балльном

10+
лет средний опыт наших преподавателей

18
выпускников сдали ЕГЭ
на 200 из 200 в 2024 году

300k+
учеников поступили в вуз мечты с нашей помощью 

14%
стобалльников России — наши выпускники

2 347
выпускника сдали ЕГЭ на 100 баллов

Преимущества подготовки в 100балльном

Запишись
на бесплатный
вводный урок

Познакомим с преподавателями и платформой

Расскажем про учёбу

Поможем поставить цель

  • 11 класс
  • 10 класс
  • 9 класс
  • 8 класс
  • 7 класс
Запись на вводный урок