← Back

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

  1. Calling the generator function creates a suspended generator frame without executing the loop yet.
  2. Wrapping it in `list(...)` or iterating with `for` repeatedly calls `next()` until `StopIteration` is raised.
  3. On each resume, execution runs up to `yield expr`, emits that value, and freezes local loop variables right in place.
  4. When the loop finishes naturally, Python raises `StopIteration` and `list(...)` collects all yielded values in order.

Common wrong fixes

Rule to remember

`yield` pauses and emits one item per step; trace every loop iteration that hits `yield` to assemble the final sequence.

Solve it in the interactive editor →

More generators problems

Keep going