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