본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] 파이썬 리스트 컴프리헨션의 마법 : 효율적 코드 작성을 위한 완벽 가이드

by Papa Martino V 2026. 2. 8.
728x90

리스트 컴프리헨션
리스트 컴프리헨션

 

파이썬(Python)을 배우다 보면 어느 순간 "이 코드를 더 간결하게 줄일 수는 없을까?"라는 고민에 빠지게 됩니다. 특히 데이터를 가공하고 리스트를 생성하는 과정에서 반복되는 for 루프와 if 조건문은 코드의 가독성을 해치기도 하죠. 이때 파이썬의 정수라고 불리는 리스트 컴프리헨션(List Comprehension)이 등장합니다. 본 가이드에서는 단순히 문법을 설명하는 것을 넘어, 실무에서 리스트 컴프리헨션을 어떻게 창의적이고 효율적으로 활용할 수 있는지, 그리고 남발했을 때의 함정은 무엇인지 전문적인 시각에서 심도 있게 다룹니다.


1. 리스트 컴프리헨션이란 무엇인가?

리스트 컴프리헨션은 기존 리스트나 반복 가능한 객체(Iterable)를 바탕으로 새로운 리스트를 생성할 때 사용하는 한 줄로 된 간결한 구문입니다. 수학의 '집합 빌더 표기법(Set-builder notation)'과 유사한 철학을 공유하며, 코드의 양을 획기적으로 줄여줄 뿐만 아니라 파이썬 내부적으로 최적화되어 있어 일반적인 append() 방식보다 실행 속도가 빠릅니다.

핵심 구조 분석

기본적인 문법 구조는 다음과 같습니다:

[표현식 for 항목 in 반복가능객체 if 조건문]

 

2. 일반 반복문 vs 리스트 컴프리헨션 비교

개발자가 리스트 컴프리헨션을 선호하는 이유는 명확합니다. 아래 표를 통해 가독성과 구조적 차이를 확인해 보세요.

구분 일반 for 루프 방식 (Imperative) 리스트 컴프리헨션 방식 (Declarative)
작성 방식 빈 리스트 생성 후 반복하며 요소를 추가 생성과 동시에 로직을 정의
코드 길이 최소 3~5줄 이상 소요 단 1줄로 해결 가능
성능(속도) 메서드 호출(append) 오버헤드 발생 C언어 레벨에서 최적화되어 더 빠름
가독성 절차적 흐름을 파악해야 함 '무엇을' 만드는지에 집중(선언적)

---

3. 심화 학습: 조건문과 중첩 활용

리스트 컴프리헨션의 진정한 강력함은 조건 필터링과 다중 루프에서 나타납니다.

3.1 필터링 (If Clause)

특정 조건에 맞는 데이터만 골라내어 리스트를 만들 때 유용합니다. 예를 들어 1부터 20 사이의 숫자 중 짝수만 제곱하여 리스트를 만드는 경우입니다.

evens_squared = [x**2 for x in range(1, 21) if x % 2 == 0]

3.2 조건부 값 할당 (If-Else)

필터링이 아니라 '값 자체'를 조건에 따라 다르게 부여하고 싶다면 for 앞에 삼항 연산자를 배치합니다.

result = ["Pass" if score >= 60 else "Fail" for score in [85, 42, 77, 59]]

3.3 중첩 컴프리헨션 (Nested)

2차원 행렬을 1차원으로 평탄화(Flatten)하거나 구구단 리스트를 만들 때 사용합니다. 다만, 중첩이 2단계 이상 깊어지면 가독성을 위해 일반 루프 사용을 권장합니다.

 

4. 실무형 Sample Example

현업 데이터 전처리 과정에서 자주 쓰이는 패턴을 예제로 구현해 보겠습니다.


# 예제: 텍스트 데이터 정제 (공백 제거 및 특정 길이 이상 단어만 추출)
raw_data = [" python ", " is ", "powerful", " AI ", "  development  "]

# 리스트 컴프리헨션 적용
clean_data = [word.strip().upper() for word in raw_data if len(word.strip()) > 2]

print(clean_data) 
# 결과: ['PYTHON', 'POWERFUL', 'DEVELOPMENT']

위 예제는 데이터 정제와 변환, 필터링을 단 한 줄에 해결하는 효율성을 보여줍니다. 전문 개발자는 이처럼 가독성과 효율의 균형을 맞추는 데 리스트 컴프리헨션을 적극 활용합니다.

 

5. 리스트 컴프리헨션 사용 시 주의사항 (Anti-Patterns)

가치가 있는 글이 되기 위해서는 장점뿐만 아니라 주의점도 명확해야 합니다.

  • 가독성 저해: 복잡한 논리가 들어간 중첩 컴프리헨션은 나중에 코드를 보는 동료(혹은 미래의 자신)를 괴롭힐 수 있습니다.
  • 메모리 효율: 리스트 컴프리헨션은 결과를 메모리에 즉시 할당합니다. 데이터가 수백만 건 이상이라면 리스트 대신 제너레이터 표현식(Generator Expression) (x for x in data)을 고려해야 합니다.
  • 부작용(Side Effects): 리스트 생성이 목적이 아닌, 단순 반복 출력을 위해 컴프리헨션을 사용하는 것은 지양해야 합니다.

 

6. 결론: 언제 사용해야 하는가?

리스트 컴프리헨션은 파이썬다운(Pythonic) 코드를 작성하는 가장 지름길입니다. "기존 데이터를 변형하거나 필터링하여 새로운 리스트를 만들 때"가 가장 적절한 사용 시점입니다. 하지만 코드의 간결함이 논리의 명확성을 압도해서는 안 된다는 점을 항상 기억하시기 바랍니다.

 

참고 및 출처:

  • Python Software Foundation - 공식 문서 (Data Structures)
  • "Fluent Python" by Luciano Ramalho
  • Real Python - Python List Comprehensions Guide
728x90