What is the difference between a list comprehension, a generator expression, and map or filter?
All four build a new sequence from an existing one; they differ in what they return and when the work happens.
- List comprehension —
[x*2 for x in data if x > 0]. Builds the whole list immediately. Readable, and the right default for anything of modest size. - Generator expression — the same with parentheses,
(x*2 for x in data). Returns a generator; nothing is computed until consumed and nothing is stored. Use it for large or infinite inputs, and whenever the result is fed straight intosum,any,max, or a loop. mapandfilter— return lazy iterators in Python 3.map(str.upper, names)is clean when you are applying an existing named function, butmap(lambda x: x*2, data)is both slower and harder to read than the comprehension.
The idiomatic guidance: comprehensions are preferred in Python; reach for map only when passing a function that already exists. Dict and set comprehensions follow the same pattern with braces.
Note: Nested comprehensions past two levels become unreadable. A plain loop is better code than a comprehension nobody can parse.





