
파이썬 list comprehension과 generator expression 차이는 문법 모양은 비슷하지만 실제 동작은 꽤 다른 대표 주제입니다. 가장 큰 차이는 결과를 지금 바로 리스트로 만들지, 아니면 필요할 때마다 하나씩 꺼내 줄지입니다.
list comprehension은 새 리스트를 즉시 만들고, generator expression은 iterator를 만들고 값은 순회할 때마다 생성합니다. 그래서 메모리, 재사용, 소비 방식이 함께 달라집니다.
파이썬 list comprehension과 generator expression 차이 한눈에 보기

list comprehension: 새 리스트를 바로 만든다generator expression: iterator를 만들고 값은 순회 시점에 만든다- 여러 번 재사용하면 comprehension이 편하고, 한 번 흘려보내면 generator가 자연스럽다
list comprehension은 언제 직관적일까
Python 튜토리얼은 list comprehension을 리스트를 간결하게 만드는 방법이라고 설명합니다. 그래서 결과가 실제 리스트여야 하는 장면에서는 의도가 아주 잘 드러납니다.
active_names = [user.name for user in users if user.active]
print(active_names[0])
print(len(active_names))
print(active_names)인덱싱, 길이 확인, 여러 번 출력처럼 즉시 접근이 필요하면 comprehension이 더 직관적입니다.
generator expression은 언제 자연스러울까
generator expression은 리스트를 미리 만들지 않고 값을 필요할 때마다 내놓습니다. 그래서 한 번 순회하며 끝나는 계산과 잘 맞습니다.
total = sum(price for price in prices if price > 0)
has_error = any(line.startswith("ERROR") for line in lines)이런 코드는 중간 리스트를 만들지 않고 바로 sum(), any()로 흘려보냅니다. 소비 함수와 generator expression의 조합은 읽는 사람에게도 의도가 잘 보입니다.

메모리와 재사용은 왜 같이 봐야 할까
list comprehension은 결과를 한 번에 리스트로 만들고, generator expression은 값을 필요할 때마다 내놓습니다. 그래서 큰 데이터를 한 번 흘려보낼 때는 generator expression이 더 부담이 적을 수 있습니다.
하지만 나중에 결국 list()로 모두 모을 거라면 그 시점에 리스트는 다시 만들어집니다. 즉 generator는 메모리를 없애는 마법이 아니라, 중간 결과를 당장 다 들고 있지 않는 방식이라고 이해하면 안전합니다.
주의점: generator는 한 번 소비되면 끝난다
gen = (x * x for x in range(5))
print(sum(gen))
print(list(gen)) # 이미 소비되어 비어 있음iterator 성질 때문에 한 번 소비한 뒤에는 다시 처음부터 쓸 수 없습니다. 이 점은 메모리 절약 장점과 함께 항상 따라오는 trade-off입니다.
너무 복잡해지면 둘 다 멈춰야 한다
result = (
normalize(item)
for group in groups
for item in group
if item is not None and is_valid(item) and not is_blocked(item)
)이 정도부터는 comprehension이든 generator든 표현이 로직을 숨기기 시작할 수 있습니다. 그럴 때는 평범한 for문으로 풀어 쓰는 쪽이 더 읽기 쉬울 수 있습니다.
정리
파이썬 list comprehension과 generator expression 차이를 한 줄로 정리하면 comprehension은 지금 리스트를 만들고, generator expression은 필요할 때 값을 만든다는 점입니다. 그래서 선택 기준도 문법 취향보다 소비 방식에 두는 편이 정확합니다.
같이 보면 좋은 글로는 파이썬 리스트 컴프리헨션 완전정리, 파이썬 map과 filter, list comprehension 차이, 파이썬 zip 함수란 무엇인가가 있습니다. 공식 기준은 Python list comprehensions 튜토리얼과 generator expressions 문서를 참고했습니다.