Ответ
Comprehensions (включения, или генераторы коллекций) — это синтаксический сахар в Python для создания коллекций (списков, словарей, множеств) из итерируемых объектов в одну строку. Они делают код более кратким и читаемым по сравнению с традиционными циклами for.
Общая структура:
новая_коллекция = [выражение for элемент in итерируемый_объект if условие]
Основные виды:
-
List Comprehension (Списковое включение) Создаёт новый список. Это наиболее распространённый вид.
# Создать список квадратов чётных чисел от 0 до 9 squares = [x**2 for x in range(10) if x % 2 == 0] # Результат: [0, 4, 16, 36, 64] -
Dictionary Comprehension (Словарное включение) Создаёт новый словарь.
# Создать словарь, где ключ - число, а значение - его квадрат square_map = {x: x**2 for x in range(5)} # Результат: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16} -
Set Comprehension (Множественное включение) Создаёт новое множество, автоматически удаляя дубликаты.
# Создать множество уникальных гласных из строки vowels = {char for char in 'hello world' if char in 'aeiou'} # Результат: {'o', 'e'} -
Generator Expression (Выражение-генератор) Синтаксически похоже на списковое включение, но использует круглые скобки. Создаёт объект-генератор, который вычисляет значения «на лету» (лениво), а не хранит их все в памяти.
# Создать генератор для удвоенных значений doubles_gen = (x * 2 for x in [1, 2, 3]) # Генератор не хранит значения, их нужно итерировать for value in doubles_gen: print(value) # Выведет 2, 4, 6
Преимущества:
- Краткость и читаемость: Код становится более декларативным.
- Производительность: Часто работают быстрее, чем эквивалентные циклы
forсappend(). - Изоляция области видимости: В Python 3 переменная цикла (
xв примерах) не «протекает» в глобальную область видимости.