Введение
В этой части продолжим работу со списками и научимся создавать их с помощью генератора.
Термины, которые будем использовать: генератор списка, списочное выражение, итерируемый объект.
Генераторы списков (списочные выражения)
Генераторы списков в 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балльного репетитора» по информатике ЕГЭ