Дана функция-генератор def evens(xs): for x in xs: if x % 2 == 0: yield x. Чему равен результат list(evens([1, 2, 3, 4]))?

AСписок [1, 2, 3, 4]
BСписок [2, 4]
CСписок [1, 3]
DЦелое число 2
Правильный ответ. Функция-генератор отдаёт значения только при yield, поэтому в результат попадают лишь элементы, прошедшие условие фильтра.

Разбор

evens(xs) для каждого элемента проверяет x % 2 == 0 и делает yield x только для чётных. list(evens([1, 2, 3, 4])) собирает все выданные значения в список — [2, 4]. Нечётные просто пропускаются: yield для них не выполняется. Это не функция, считающая количество чётных, поэтому 2 тоже не подходит.

Проверь себя · 1/3разбор после ответа
Есть it = iter(['a', 'b']). Что вернёт самый первый вызов next(it) сразу после создания итератора?
Тренировать Python в Telegram

Ещё вопросы по теме «Итераторы и генераторы»