Дан список xs = [1, -2, 3, 0]. Что вернёт выражение [x * 2 for x in xs if x > 0]?
A
[2, 6]B
[2, -4, 6, 0]C
[1, 3]D
[2, 6, 0]Правильный ответ. В list comprehension условие после
if фильтрует элементы, а выражение перед for вычисляется только для прошедших фильтр.Разбор
В выражении [x * 2 for x in xs if x > 0] сначала перебираются элементы xs, затем применяется фильтр x > 0, и только для оставшихся элементов вычисляется x * 2. Элементы, не прошедшие условие, просто не попадают в результат.
Проверь себя · 1/3разбор после ответа
Нужно преобразовать
user_ids = [1, -1, 2] в список строк только для положительных значений. Какой вариант обычно читается проще?Ещё вопросы по теме «Генераторы списков и встроенные функции»
- Есть список словарей `users`, где у некоторых пользователей отсутствует email (например, `u.get("email")` возвращает `None`). Нужно получить список email в нижнем регистре, пропуская отсутствующие. Какой вариант обычно наиболее читаемый?
- Дан список батчей `batches = [[101, 102], [], [103]]`. Что вернёт выражение `[x for batch in batches for x in batch]`?
- Дан список `vals = [0, 1, 2]`. Что вернёт выражение `[x if x % 2 == 0 else -1 for x in vals]`?
- У вас есть список словарей `users` с ключами `id` и `is_active`. Нужно получить список `id` только активных пользователей. Какое решение обычно проще читать, чем комбинация `map()` + `filter()` с `lambda`?
- У вас уже есть функция `normalize_email` (принимает строку и возвращает строку). Нужно применить её к списку `emails` и получить новый `list`. Какой вариант можно считать уместным и читаемым?
- Все вопросы по «Генераторы списков и встроенные функции» →