Дан список 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] — постоянной замене без проверки.

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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