v1.0.0

Python с нуля для ЕГЭ · Включения: собираем коллекции коротко

Урок курсаPython 35 задачБесплатно

Включения: собираем коллекции коротко

Перепишем знакомый цикл как читаемое списковое, множественное или словарное включение без скрытой сложности.

Теория

Включение сжимает знакомый цикл

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

squares = []for number in range(1, 5):    squares.append(number ** 2) short_squares = [number ** 2 for number in range(1, 5)]

Читать короткую запись удобно справа налево по смыслу: берёмnumber из range, вычисляем его квадрат и помещаем результат в новый список.

Условие оставляет только подходящие элементы

Разберём на примере
Выберем квадраты чётных чисел
Исходные числа равны 1, 2, 3, 4 и 5.
  1. for последовательно получает каждое число.
  2. Условие number % 2 == 0 пропускает 1, 3 и 5.
  3. Для 2 и 4 вычисляется квадрат.
  4. Новый список равен [4, 16].
even_squares = [    number ** 2    for number in range(1, 6)    if number % 2 == 0]print(even_squares)
Проверьте себя
Что произойдёт раньше: проверка чётности или возведение выбранного числа в квадрат?
Сначала условие решает, подходит ли число; выражение результата вычисляется только для подходящих значений.

Форма скобок определяет коллекцию

Квадратные скобки создают список, фигурные с одним выражением — множество, а фигурные с парой ключ: значение — словарь. Выбирайте форму по требуемому результату, а не ради краткости.

words = ["мир", "код", "мир"]lengths = {word: len(word) for word in words}unique_lengths = {len(word) for word in words}print(lengths)print(unique_lengths)

Краткость не должна прятать ход решения

Как действовать
Проверяем, подходит ли включение
  1. Назовите новую коллекцию. Список, множество или словарь?
  2. Найдите один источник. Какие элементы перебираются?
  3. Запишите одно преобразование. Что попадёт в результат?
  4. Добавьте простой фильтр. Только если часть элементов нужно пропустить.
  5. Разверните при сомнении. Если запись трудно объяснить как цикл, оставьте цикл.
Проверьте себя
Чем множество-включение отличается от спискового при повторяющихся результатах?
Множество оставляет только уникальные значения, список сохраняет все результаты и их порядок.

Практика

Прочитайте списковое включение

Какой список создаст [number + 1 for number in [2, 4, 6]]? Запишите числа через пробел.

Подсказка
К каждому исходному числу прибавляется единица.
Решение

Для 2, 4 и 6 выражение возвращает 3, 5 и 7 в том же порядке.

Примените фильтр

Какой список создаст [n for n in range(1, 7) if n % 3 == 0]? Запишите числа через пробел.

Подсказка
Оставьте числа, которые делятся на 3 без остатка.
Решение

Из чисел 1–6 условию соответствуют 3 и 6.

Сколько элементов будет в {len(word) for word in ["кот", "дом", "я"]}?

Подсказка
Два слова имеют одинаковую длину, а множество хранит уникальные значения.
Решение

Длины равны 3, 3 и 1; множество содержит только 3 и 1.

Соберите словарь

Какое значение будет у ключа "код" в {word: len(word) for word in ["я", "код"]}?

Подсказка
Значением становится длина соответствующего слова.
Решение

Слово «код» содержит три символа, поэтому словарь хранит пару «код»: 3.

Перепишите знакомый цикл

Локально создайте включением квадраты нечётных чисел от 1 до 7 включительно. Какое последнее число будет в списке?

Подсказка
range должен дойти до 7, фильтр оставляет нечётные числа.
Решение

Последнее нечётное число — 7, его квадрат равен 49.

Итог

Вы умеете узнавать во включении обычный цикл и использовать короткую запись только там, где она остаётся прозрачной.

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

Прогресс

0 / 5
x

Вы ещё не решали задания