В этом модуле мы изучим List Comprehension (генераторы списков) — мощный инструмент языка Python, позволяющий создавать новые списки на основе существующих всего в одну строку кода. Это делает код более компактным и часто более читаемым, чем использование классических циклов `for` и методов `append()`.
Мы разберем:
Базовый синтаксис генераторов.
Использование условий `if` для фильтрации элементов.
Применение тернарного оператора внутри генератора.
Отличия генераторов от обычных циклов.
Задания расположены от простого к сложному: от простой подстановки ключевых слов до написания логики фильтрации и анализа результата выполнения кода. Обратите внимание на синтаксис: квадратные скобки `[]` обязательны, так как мы создаем именно список.
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Модуль 6: Циклы
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
Основы синтаксиса List Comprehension
Заполните пропуски ключевыми словами, чтобы создать список квадратов чисел из диапазона от 0 до 4.
# Классический цикл:
# squares = []
# for x in range(5):
# squares.append(x**2)
# То же самое с помощью list comprehension:
squares = [x**2 input1S x input2S range(5)]
print(squares)Преобразование строк
Проанализируйте код. Генератор списка перебирает символы в строке и применяет к каждому метод `.upper()`. Какой список получится в итоге?
letters = [char.upper() for char in "abc"]
print(letters)Фильтрация элементов списка
Используя токены из банка, составьте генератор списка, который выберет из исходного списка `numbers` только положительные числа (больше 0).
numbers = [10, -5, 20, -3, 0]
positive_nums = [input1S input2S n input3S numbers input4S n > 0]
print(positive_nums)Соберите генератор списка
Вам нужно создать список `doubles`, содержащий удвоенные значения из списка `nums`. Расставьте фрагменты кода в правильном порядке.
doubles = [x * 2for x in nums](x * 2)for x in nums:Сколько элементов останется?
В коде создается список `res`, фильтрующий слова по их длине. Введите число — длину получившегося списка `res` (количество элементов в нем).
words = ["apple", "cat", "banana", "dog", "elephant"]
res = [w for w in words if len(w) < 5]
print(len(res))Найдите ошибку в синтаксисе
Разработчик хотел создать список четных чисел, но перепутал скобки. List comprehension должен быть в квадратных скобках. Исправьте код.
numbers = range(10)evens = (x for x in numbers if x % 2 == 0)print(evens)Сопоставьте описание и код
Сопоставьте задачу (описание слева) с соответствующим кодом list comprehension (справа). Обращайте внимание на операции и условия.
[x for x in nums if x > 10][x for x in nums][0 if x < 0 else x for x in nums]Правильный и неправильный синтаксис
Распределите примеры кода на две группы: синтаксически корректные (будут работать) и с ошибкой (вызовут SyntaxError).
[x for x in range(5)][x * 2 for x in range(5) if x > 0][x for x in range(5) else 0][for x in range(5) x][x if x > 0 else 0 for x in range(5)]Тернарный оператор внутри списка
Заполните пропуски, чтобы создать список `status`. Если оценка (`score`) больше или равна 50, в список должно попасть слово "Pass", иначе — "Fail".
scores = [40, 90, 35, 60]
status = ["Pass" input1S score >= 50 input2S "Fail" for score in scores]
print(status)Сборка программы: Анализ цен
Восстановите правильный порядок строк программы. Программа должна:
1. Объявить список цен `prices`.
2. Создать новый список `sale_prices`, применив скидку 10% (умножив на 0.9) ко всем ценам.
3. Вывести результат.
print(sale_prices)sale_prices = [p * 0.9 for p in prices]prices = [100, 200, 300]sale_prices = (p * 0.9 for p in prices)