List comprehension

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

Тренажер по Python

В этом модуле мы изучим List Comprehension (генераторы списков) — мощный инструмент языка Python, позволяющий создавать новые списки на основе существующих всего в одну строку кода. Это делает код более компактным и часто более читаемым, чем использование классических циклов `for` и методов `append()`.

Мы разберем:
Базовый синтаксис генераторов.
Использование условий `if` для фильтрации элементов.
Применение тернарного оператора внутри генератора.
Отличия генераторов от обычных циклов.

Задания расположены от простого к сложному: от простой подстановки ключевых слов до написания логики фильтрации и анализа результата выполнения кода. Обратите внимание на синтаксис: квадратные скобки `[]` обязательны, так как мы создаем именно список.

Список тем

Основы синтаксиса List Comprehension

id: 40011_task_lc_01

Заполните пропуски ключевыми словами, чтобы создать список квадратов чисел из диапазона от 0 до 4.

Заполните пропуски
# Классический цикл:
# squares = []
# for x in range(5):
#     squares.append(x**2)

# То же самое с помощью list comprehension:
squares = [x**2 input1S x input2S range(5)]
print(squares)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Преобразование строк

id: 40011_task_lc_02

Проанализируйте код. Генератор списка перебирает символы в строке и применяет к каждому метод `.upper()`. Какой список получится в итоге?

Выберите правильный вариант ответа
letters = [char.upper() for char in "abc"]
print(letters)
Сообщения
Проверить
Показать подсказку

Фильтрация элементов списка

id: 40011_task_lc_03

Используя токены из банка, составьте генератор списка, который выберет из исходного списка `numbers` только положительные числа (больше 0).

Нужно правильно расставить в пропуски предложенные варианты
numbers = [10, -5, 20, -3, 0]
positive_nums = [input1S input2S n input3S numbers input4S n > 0]
print(positive_nums)
for
n
in
if
else
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Соберите генератор списка

id: 40011_task_lc_04

Вам нужно создать список `doubles`, содержащий удвоенные значения из списка `nums`. Расставьте фрагменты кода в правильном порядке.

Перетяните в правильном порядке строки из одного блока в другой
doubles = [
x * 2
for x in nums]
(x * 2)
for x in nums:
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сколько элементов останется?

id: 40011_task_lc_05

В коде создается список `res`, фильтрующий слова по их длине. Введите число — длину получившегося списка `res` (количество элементов в нем).

Что должно получиться?
words = ["apple", "cat", "banana", "dog", "elephant"]
res = [w for w in words if len(w) < 5]
print(len(res))
Сообщения
Проверить
Показать подсказку

Найдите ошибку в синтаксисе

id: 40011_task_lc_06

Разработчик хотел создать список четных чисел, но перепутал скобки. List comprehension должен быть в квадратных скобках. Исправьте код.

Найдите ошибку и исправьте
numbers = range(10)
evens = (x for x in numbers if x % 2 == 0)
print(evens)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сопоставьте описание и код

id: 40011_task_lc_07

Сопоставьте задачу (описание слева) с соответствующим кодом list comprehension (справа). Обращайте внимание на операции и условия.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Фильтрация: только числа больше 10
Модификация: заменить отрицательные на 0
Копия списка без изменений
[x for x in nums if x > 10]
[x for x in nums]
[0 if x < 0 else x for x in nums]
Сообщения
Проверить
Показать подсказку

Правильный и неправильный синтаксис

id: 40011_task_lc_08

Распределите примеры кода на две группы: синтаксически корректные (будут работать) и с ошибкой (вызовут 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)]
Сообщения
Проверить
Показать подсказку

Тернарный оператор внутри списка

id: 40011_task_lc_09

Заполните пропуски, чтобы создать список `status`. Если оценка (`score`) больше или равна 50, в список должно попасть слово "Pass", иначе — "Fail".

Заполните пропуски
scores = [40, 90, 35, 60]
status = ["Pass" input1S score >= 50 input2S "Fail" for score in scores]
print(status)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сборка программы: Анализ цен

id: 40011_task_lc_10

Восстановите правильный порядок строк программы. Программа должна:
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)
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру