List Comprehensions and Generators
What are the key trade-offs of List Comprehensions and Generators? When would you choose it vs alternatives?
Answers use simple, clear English.
Quick interview answer
Pros: Readable for simple transforms; often faster than manual append loops. Cons: Nested comps hurt readability; eager list comp on huge data wastes RAM.
Detailed answer
Pros: Readable for simple transforms; often faster than manual append loops. Cons: Nested comps hurt readability; eager list comp on huge data wastes RAM. Decision: pick when benefits outweigh operational cost. Core: [f(x) for x in iterable if cond] builds lists concisely. Generator expressions ( ... ) are lazy and memory-efficient. Dict/set comps follow same syntax. Real-time example: Parse log lines: active_errors = [ln for ln in lines if 'ERROR' in ln and ln.strip()]. Pros: Readable for simple transforms; often faster than manual append loops. Cons: Nested comps hurt readability; eager list comp on huge data wastes RAM. Common mistakes: Side effects inside comprehension; shadowing loop variable leaks in Py2 (not Py3). Best practices: Keep one logical clause; switch to generator for streaming pipelines. Audience level: Engineering Manager.
Full explanation
[f(x) for x in iterable if cond] builds lists concisely. Generator expressions ( ... ) are lazy and memory-efficient. Dict/set comps follow same syntax.
Real example & use case
Parse log lines: active_errors = [ln for ln in lines if 'ERROR' in ln and ln.strip()].
Pros & cons
Pros: Readable for simple transforms; often faster than manual append loops. Cons: Nested comps hurt readability; eager list comp on huge data wastes RAM.
Common mistakes
Side effects inside comprehension; shadowing loop variable leaks in Py2 (not Py3).
Best practices
Keep one logical clause; switch to generator for streaming pipelines.
Follow-up questions
- How would you test List Comprehensions and Generators?
- What metrics prove List Comprehensions and Generators is healthy in prod?
- How does List Comprehensions and Generators change at 10× traffic?