Start here. This is the direct spoken answer to practice first.
Overview
The syntax is similar, but the resulting object and the timing of work are different.
A list, set, or dictionary comprehension evaluates eagerly and builds the resulting collection. A generator expression creates a lazy iterator that produces items as they are requested. I choose a comprehension when the result is reasonably sized and the caller needs a concrete, reusable collection. I choose a generator expression when values should be streamed once, early results matter, or materializing everything would waste memory.