[Python] 제너레이터 표현식

KangHo Lee's avatar
Jun 05, 2025
[Python] 제너레이터 표현식

✅ 제너레이터 표현식이란?

리스트 내포(list comprehension)과 비슷하지만, 메모리에 모든 값을 저장하지 않고 하나씩 생성해주는 문법입니다.

🔹 문법

(expression for item in iterable if 조건)
⚠️ [] 대신 ()를 사용합니다.

🔸 예시 1: 제곱값 생성

gen = (x * x for x in range(5)) print(gen) # <generator object ...> print(next(gen)) # 0 print(next(gen)) # 1 print(next(gen)) # 4

🔸 예시 2: 짝수만 필터링

evens = (x for x in range(10) if x % 2 == 0) for n in evens: print(n) # 0 2 4 6 8

✅ 리스트 내포와의 차이점

구분
리스트 내포 (List Comprehension)
제너레이터 표현식 (Generator Expression)
문법
[x * x for x in range(5)]
(x * x for x in range(5))
결과
리스트 반환
제너레이터 반환
메모리
한 번에 모든 값 저장
필요한 순간에 하나씩 생성 (메모리 절약)
속도
빠름 (작은 데이터에 적합)
느릴 수 있음 (큰 데이터에 적합)
💡
필요한 순간에 하나씩 생성
→ 현재 위치(index같은 내부 상태)만 저장하고 next() 등으로 호출하면 알고리즘 실행해서 결과 반환

🔍 언제 쓰나요?

  • 데이터가 크고, 한 번씩만 처리하면 되는 경우
  • 메모리를 아끼고 싶을 때
  • sum(), any(), all() 같이 반복만 필요한 경우
total = sum(x * x for x in range(1000000)) # ✅ 효율적

 
Share article

devleekangho