작성: Corn/sec, ChatGPT, 편집: Corn/sec

Python에서 데이터를 다룰 때, 리스트 컴프리헨션과 함께 **제너레이터 표현식(generator expressions)**을 활용하면 메모리를 절약하고 성능을 향상시킬 수 있습니다.
이번 포스팅에서는 제너레이터 표현식이 무엇인지, 기존 for문과 리스트 컴프리헨션과 비교하며 활용법을 익히는 방법을 자세히 알아보겠습니다. 🚀
# 제너레이터 표현식을 프로그래머스에서도 활용 하실 수 있습니다. #
제너레이터 표현식은 리스트 컴프리헨션과 유사하지만, 리스트를 생성하는 대신, 이터레이터(iterator)를 반환하는 표현식입니다. 즉, 필요한 순간에 값을 생성하여 메모리 사용을 최적화할 수 있습니다.
# 리스트 컴프리헨션
lst = [x**2 for x in range(10)] # 모든 값을 메모리에 저장
# 제너레이터 표현식
gen = (x**2 for x in range(10)) # 필요할 때마다 값을 생성
✅ 리스트 vs. 제너레이터 표현식의 차이
print(sum(x**2 for x in range(10))) # 0^2 + 1^2 + ... + 9^2 = 285
def sum_list(lst):
total = 0
for num in lst:
total += num
return total
def sum_list(lst):
return sum(num for num in lst)
➝ 불필요한 변수(total)를 제거하고 메모리 사용을 줄이며 코드 가독성을 높임.
def sum_even(lst):
total = 0
for num in lst:
if num % 2 == 0:
total += num
return total
def sum_even(lst):
return sum(num for num in lst if num % 2 == 0)
➝ 조건문을 추가하여 짝수만 필터링.
def total_length(words):
total = 0
for word in words:
total += len(word)
return total
def total_length(words):
return sum(len(word) for word in words)
➝ 불필요한 변수를 줄이고, 간결한 코드 작성 가능.
def sum_greater_than_10(lst):
total = 0
for num in lst:
if num > 10:
total += num
return total
def sum_greater_than_10(lst):
return sum(num for num in lst if num > 10)
➝ 필터링 조건을 추가하여 메모리 절약.
def count_multiples_of_3(lst):
count = 0
for num in lst:
if num % 3 == 0:
count += 1
return count
def count_multiples_of_3(lst):
return sum(1 for num in lst if num % 3 == 0)
➝ 카운트할 때도 sum(1 for ...)을 사용하면 간결하게 해결 가능.
✅ 메모리 효율성 → 한 번에 하나씩 값을 생성하여 메모리 낭비 최소화
✅ 빠른 실행 속도 → 리스트를 미리 생성하지 않으므로 연산 속도 향상
✅ 가독성 향상 → 코드가 간결해지고, 불필요한 변수를 줄일 수 있음
방식 메모리 사용 속도 추천 상황
| 리스트 컴프리헨션 | 높음 | 빠름 | 작은 크기의 데이터 처리 |
| 제너레이터 표현식 | 낮음 | 빠름 | 대용량 데이터 처리 |
| [Python] 비트 연산자(Bitwise Operator) 개념 정리 (0) | 2025.02.04 |
|---|---|
| [Python] 데이터프레임(DataFrame)의 정렬 방식 (0) | 2025.02.01 |