
개요
파이썬 리스트 컴프리헨션(List Comprehension)은 기존 리스트를 기반으로 새로운 리스트를 생성할 때 사용하는 파이썬만의 고유하고 강력한 문법이다. 단순히 코드를 한 줄로 줄이는 테크닉을 넘어, 데이터 처리의 의도를 명확히 전달하고 실행 성능을 높이는 역할을 한다. 이번 포스팅에서는 기초 문법부터 심화 테크닉, 그리고 실제 성능 차이까지 상세히 분석한다.
1. 리스트 컴프리헨션이란?
"'Comprehension'이라는 단어는 수학의 'Set Comprehension'(집합 포괄 연산)에서 유래했다."
이는 집합을 정의할 때 원소를 일일이 나열하는 대신, 특정 조건을 만족하는 성질을 통해 정의하는 방식과 유사하다. 파이썬에서는 이를 프로그래밍에 접목하여, 반복 가능한 객체(Iterable)로부터 새로운 리스트를 생성하는 선언적인 문법 구조로 완성시켰다.
2. 핵심 문법
2.1 기본 구조 정의
리스트 컴프리헨션의 기본 골격은 대괄호 내부에 표현식과 for 문을 배치하는 것이다.
2.2 문법 예제
위의 정의를 바탕으로 실제 리스트를 생성하는 예제 코드는 다음과 같다.
# 1부터 5까지의 숫자에 1을 더한 리스트 생성
numbers = [1, 2, 3, 4, 5]
plus_one = [x + 1 for x in numbers]
# 결과: [2, 3, 4, 5, 6]
3. 테크닉
3.1 필터링 (Filtering)
if 문을 추가하여 특정 조건을 만족하는 데이터만 선별적으로 리스트에 담을 수 있다.
# 짝수만 필터링하기
evens = [x for x in range(10) if x % 2 == 0]
3.2 중첩 루프 처리 (Nested Loops)
이차원 리스트를 평탄화하거나 다차원 데이터를 생성할 때 사용한다. 문법이 다소 복잡해 보일 수 있으나 내부적인 동작 순서를 이해하면 명확해진다.
# 2차원 리스트 평탄화
matrix = [[1, 2], [3, 4]]
flat = [num for row in matrix for num in row]
- 'for row in matrix': matrix에서 행(row)을 하나씩 꺼낸다.
- 'for num in row': 꺼낸 행(row)에서 숫자(num)를 하나씩 다시 꺼낸다.
- 'num': 최종적으로 꺼낸 숫자들을 새로운 리스트에 담는다.
4. 왜 리스트 컴프리헨션을 사용해야 하는가?
가장 큰 이유는 성능 이득이다. 일반적인 for 루프 안에서 'append()' 메서드를 호출하는 것은 파이썬 수준에서 지속적인 함수 호출 오버헤드를 유발한다. 반면 리스트 컴프리헨션은 파이썬 내부 엔진에서 최적화된 루프로 작동한다.
import timeit
# 일반 반복문 + append 성능 측정
loop_speed = timeit.timeit('res=[]; [res.append(i) for i in range(1000)]', number=10000)
# 리스트 컴프리헨션 성능 측정
comp_speed = timeit.timeit('[i for i in range(1000)]', number=10000)
반복문 속도: 0.2486s
컴프리헨션 속도: 0.1533s
테스트 결과, 리스트 컴프리헨션이 일반 반복문보다 현저히 빠른 성능을 보여준다. 대규모 데이터를 처리할 때 이 차이는 더 극명해진다.
Conclusion
리스트 컴프리헨션은 파이썬의 간결함과 효율성을 대변하는 문법이다. 단순히 코드를 한 줄로 줄이는 테크닉을 넘어, 데이터 처리의 의도를 명확하게 정의하고 실행 엔진의 최적화된 성능을 이끌어낼 수 있다.
이제 성능 이득과 가독성을 챙기는 것을 이해했다면,
여러분은 리스트를 보다 더 좋은 성능과 가독성 좋게 구성할 수 있게 될것이다.
'Dev > Python' 카테고리의 다른 글
| 구글 코랩(Colab)으로 AI 시작해보기 with Python (0) | 2026.02.09 |
|---|---|
| 파이썬 심화 : 정규표현식(Regex)의 심화 (0) | 2026.01.27 |
| 파이썬 심화: 텍스트의 완성, '정규표현식(Regex)'의 기초 (0) | 2026.01.22 |
| 파이썬 기초: 데이터 처리의 핵심, '문자열(String) 조작법' (0) | 2026.01.21 |
| 파이썬 심화: 클래스를 만드는 클래스, '메타클래스(Metaclass)' (0) | 2026.01.20 |