Home › Problems › Generator multiples of 2
Generator multiples of 2
🧠 Predict the output Topic: generators Difficulty: medium Free
What this problem practises
Generators produce values lazily and can be consumed exactly once. That makes them memory-friendly for big sequences, and genuinely confusing the first time one is iterated again and yields nothing.
This is an output-prediction problem: read the snippet carefully and write down exactly what it prints before anything runs. These questions are interview staples because they test whether you know the language rules, or merely recognise their syntax.
Difficulty: medium — expect to hold two interacting rules in your head at once, such as a boundary combined with a mutation.
The challenge
What will this program print? Type the exact output.
The code runs in PyDebug’s in-browser compiler. Open the problem, run the snippet, watch the exact error or output, and keep iterating until it is right. Signed-in solves count toward XP and your daily streak.
The snippet
The interactive editor pre-fills exactly this code — read it, then submit your prediction:
gen = (x * 2 for x in range(5))
print(list(gen))Understand the rule
Any Python function containing `yield` becomes a generator factory: calling it does not run a single line of its body right away, and instead returns a lazy generator iterator. Values are produced one at a time as `list()`, `for`, or `next()` pulls from the generator.
How to trace it
- Calling the generator function creates a suspended generator frame without executing the loop yet.
- Wrapping it in `list(...)` or iterating with `for` repeatedly calls `next()` until `StopIteration` is raised.
- On each resume, execution runs up to `yield expr`, emits that value, and freezes local loop variables right in place.
- When the loop finishes naturally, Python raises `StopIteration` and `list(...)` collects all yielded values in order.
Common wrong fixes
- Thinking `yield` terminates the function permanently after the first value the way `return` does.
- Expecting a bare generator call `gen(5)` to return a list when `print(gen(5))` without `list(...)` would print `<generator object ...>`.
- Misreading `range` bounds inside the generator body and including one extra multiple at the end.
Rule to remember
`yield` pauses and emits one item per step; trace every loop iteration that hits `yield` to assemble the final sequence.
More generators problems
- Generator multiples of 3 medium
- Generator multiples of 2 medium
- Generator multiples of 4 medium
Keep going
- Output-prediction strategies — how to predict tricky snippets without running them.
- Browse every generators problem in this topic.
- Common Python errors and what they actually mean, plus the Python glossary for any term used on this page.