컴프리헨션과 제너레이터는 파이썬다운 코드를 작성하는 핵심 도구입니다. 이 치트시트는 list/dict/set comprehension과 generator expression의 선택 기준(가독성 vs 메모리)을 빠르게 정리합니다.
언제 이 치트시트를 보나?
- “한 줄로 만들까, for-loop로 풀어 쓸까” 고민될 때
- 데이터가 커서 메모리가 걱정될 때(지연 평가가 필요할 때)
핵심 패턴
- 컴프리헨션: “작은 변환/필터”를 간결하게
- 제너레이터: “큰 데이터/스트리밍”을 메모리 효율적으로
- 디버깅/가독성이 우선이면 for-loop로 풀어 쓰는 게 더 좋을 때가 많음
최소 예제
1
2
3
4
| # list comprehension: 변환
nums = [1, 2, 3]
squares = [n * n for n in nums]
print(squares)
|
1
2
3
4
| # dict comprehension: 매핑 생성
names = ["a", "b", "c"]
idx = {name: i for i, name in enumerate(names)}
print(idx)
|
1
2
3
4
| # generator expression: 지연 평가
nums = range(10_000_000)
total = sum(n * n for n in nums) # 괄호: generator expression
print(total)
|
1
2
3
4
5
6
7
| # generator function (yield)
def chunks(seq, size):
for i in range(0, len(seq), size):
yield seq[i : i + size]
for c in chunks([1, 2, 3, 4, 5], 2):
print(c)
|
자주 하는 실수/주의점
- 컴프리헨션 안에 조건/삼항/중첩 루프가 과해지면 가독성이 급격히 떨어짐 → for-loop로 분해
sum([ ... ])처럼 불필요한 리스트를 만들지 말고 sum( ... for ... )를 고려- 제너레이터는 “한 번 소비하면 끝”인 경우가 많음(재사용하려면 새로 만들어야 함)
관련 링크(공식 문서)