Как работают list comprehension, dict comprehension, set comprehension?

list / dict / set comprehension — это компактный синтаксис для создания списков, словарей и множеств по схеме: взять элементы из итерируемого объекта, при необходимости отфильтровать их условием и преобразовать выражением, собрав результат в новую коллекцию.
Подробный ответ

Идея comprehension

Comprehension заменяет цикл с ручным append() / добавлением в коллекцию на одно выражение.

Базовые формы:

# list comprehension
[expr for item in iterable if condition]

# set comprehension
{expr for item in iterable if condition}

# dict comprehension
{key_expr: value_expr for item in iterable if condition}

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

List comprehension

Создаёт новый список, проходится по итерируемому объекту и применяет выражение к каждому элементу, опционально фильтруя по условию.

nums = [1, 2, 3, 4, 5, 6]

squares = [x * x for x in nums if x % 2 == 0]
# [4, 16, 36]

Эквивалентно коду с циклом:

squares = []
for x in nums:
    if x % 2 == 0:
        squares.append(x * x)

Set comprehension

Создаёт множество (уникальные значения) по аналогичному принципу:

words = ["apple", "Apple", "banana", "banana", "pear"]
unique = {w.lower() for w in words}
# {'apple', 'banana', 'pear'}

Удобно, когда нужно убрать дубликаты и параллельно преобразовать значения.

Dict comprehension

Создаёт словарь, формируя пары «ключ–значение» прямо в выражении:

nums = [1, 2, 3, 4]

squares = {n: n * n for n in nums}
# {1: 1, 2: 4, 3: 9, 4: 16}

С фильтрацией:

data = {"a": 1, "b": 0, "c": 3}
non_zero = {k: v for k, v in data.items() if v != 0}
# {'a': 1, 'c': 3}

Фраза для собеседования

Comprehension — это краткий синтаксис создания коллекций. list comprehension строит список [expr for item in iterable if cond], dict comprehension — словарь {k: v for ... if ...}, set comprehension — множество {expr for ... if ...}. Они заменяют циклы с накоплением и делают код короче и читаемее.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге