Дана функция-генератор 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) сразу после создания итератора?Ещё вопросы по теме «Итераторы и генераторы»
- Есть `xs = [1, 2, 3]` и `it = iter(xs)`. Сначала выполняется `a = list(it)`, а затем `b = list(it)`. Чему равно `b`?
- Есть `it = iter(['a', 'b'])`. Что вернёт самый первый вызов `next(it)` сразу после создания итератора?
- Дан генератор: `def gen(): print("A"); yield 1; print("B"); yield 2`. Сразу после `g = gen()` что будет выведено в консоль?
- Что создаёт выражение `squares = (x * x for x in xs)`?
- В отладке вы сделали `pairs = zip(users, spends)`, затем `debug = list(pairs)`. После этого `d = dict(pairs)` оказался пустым словарём. Почему?
- Все вопросы по «Итераторы и генераторы» →