Что такое списки и словари‑генераторы (list / dict comprehension)?

Списковое включение (list comprehension) — это компактный способ создать новый список: [expr for item in iterable if condition]. Аналогично словарное включение (dict comprehension) создаёт словарь через {key_expr: value_expr for item in iterable if condition}.
Подробный ответ

List comprehension и dict comprehension — это короткий, но выразительный синтаксис для создания коллекций на основе других коллекций. На собеседованиях часто дают задачи, которые можно решить и обычным циклом, и с помощью comprehension, чтобы посмотреть на твой уровень владения синтаксисом Python.

Списковое включение (list comprehension)

Общий вид:

[expression for item in iterable if condition]

Примеры:

numbers = [1, 2, 3, 4]
# возвести все числа в квадрат
squares = [x * x for x in numbers]  # [1, 4, 9, 16]

# оставить только чётные
evens = [x for x in numbers if x % 2 == 0]  # [2, 4]

То же самое можно записать обычным циклом for, но comprehension короче и часто читается проще, если выражение не слишком сложное.

Словарное включение (dict comprehension)

Общий вид:

{key_expr: value_expr for item in iterable if condition}

Пример: построить словарь «число → его квадрат»:

numbers = [1, 2, 3]
squares = {x: x * x for x in numbers}
# {1: 1, 2: 4, 3: 9}

Частый кейс в backend‑разработке — преобразование списка объектов в словарь по какому‑то ключу.

users = [
    {"id": 1, "name": "Ann"},
    {"id": 2, "name": "Max"},
]
users_by_id = {u["id"]: u for u in users}

Когда использовать comprehension, а когда нет

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

  • Если логика слишком сложная (много условий, вложенные циклы), лучше написать обычный цикл — так код будет понятнее.

Как ответить на собеседовании

List и dict comprehension — это краткая форма записи циклов для построения новых коллекций. Списковое включение выглядит как [expr for x in iterable if cond], а словарное — как {k: v for x in iterable if cond]. Их используют для компактного и читаемого преобразования данных.

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

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