Что такое comprehensions (включения) в Python?

Ответ

Comprehensions (включения, или генераторы коллекций) — это синтаксический сахар в Python для создания коллекций (списков, словарей, множеств) из итерируемых объектов в одну строку. Они делают код более кратким и читаемым по сравнению с традиционными циклами for.

Общая структура: новая_коллекция = [выражение for элемент in итерируемый_объект if условие]

Основные виды:

  1. List Comprehension (Списковое включение) Создаёт новый список. Это наиболее распространённый вид.

    # Создать список квадратов чётных чисел от 0 до 9
    squares = [x**2 for x in range(10) if x % 2 == 0]
    # Результат: [0, 4, 16, 36, 64]
  2. Dictionary Comprehension (Словарное включение) Создаёт новый словарь.

    # Создать словарь, где ключ - число, а значение - его квадрат
    square_map = {x: x**2 for x in range(5)}
    # Результат: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
  3. Set Comprehension (Множественное включение) Создаёт новое множество, автоматически удаляя дубликаты.

    # Создать множество уникальных гласных из строки
    vowels = {char for char in 'hello world' if char in 'aeiou'}
    # Результат: {'o', 'e'}
  4. 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 в примерах) не «протекает» в глобальную область видимости.