Списковые, словарные и множественные включения
Соберите целую коллекцию в одной понятной строке
- свободно писать списковые, словарные и множественные включения,
- добавлять фильтрацию с помощью завершающего
ifи выбирать значения условным выражением, - вкладывать циклы внутрь одного включения,
- использовать множественное включение для удаления дубликатов, а словарное — для переназначения ключей и значений,
- честно решать, когда включение помогает, а когда лучше обычный цикл или генератор.
1. От цикла к включению
Вы уже умеете строить список циклом: начать с пустого, пройтись и вызвать append. Допустим, вам нужны квадраты чисел от 0 до 4.
squares = []
for n in range(5):
squares.append(n * n)
print(squares)
Вывод:
[0, 1, 4, 9, 16]
Списковое включение выражает тот же самый замысел в одну строку. Три подвижные части цикла — выражение-результат, переменная цикла и итерируемый объект — выстраиваются слева направо:
squares = [n * n for n in range(5)]
print(squares) # [0, 1, 4, 9, 16]
Представьте это как сборочный конвейер: элементы поступают справа из итерируемого объекта, каждый преобразуется выражением слева, а готовые детали собираются в совершенно новый список. Ничего не меняется на месте; включение всегда создаёт новую коллекцию.