Дан список vals = [0, 1, 2]. Что вернёт выражение [x if x % 2 == 0 else -1 for x in vals]?

A[0, 1, 2]
B[-1, -1, -1]
C[0, -1, 2]
D[-1, 1, -1]
Правильный ответ. Тернарное выражение x if cond else y подставляет одно из двух значений на каждом шаге списочного включения.

Разбор

В выражении [x if x % 2 == 0 else -1 for x in vals] для каждого x проверяется условие: если чётное — оставляем x, иначе подставляем -1. Для vals = [0, 1, 2] получится [0, -1, 2]. Это не фильтр: длина результата всегда равна длине исходного списка. Вариант [-1, 1, -1] соответствовал бы инвертированному условию (заменять чётные, оставлять нечётные), а [-1, -1, -1] — постоянной замене без проверки.

Проверь себя · 1/3разбор после ответа
У вас есть список словарей users с ключами id и is_active. Нужно получить список идентификаторов только активных пользователей. Какое решение обычно проще читать, чем комбинация map и filter с анонимными функциями?
Тренировать Python в Telegram

Ещё вопросы по теме «Генераторы списков и встроенные функции»