리스트 컴프리헨션(list comprehension)은 「반복문과 조건문을 결합해 한 줄로 새 리스트를 만드는」 파이썬의 대표적 표현 방식입니다.
짧고 읽기 쉬워 「파이썬다운(pythonic)」 코드의 상징과도 같습니다.
기본 형식은 「[표현식 for 변수 in 컬렉션]」입니다.
squares = [x**2 for x in range(10)] — 0~9의 제곱들로 이루어진 리스트.
일반 for로 쓰면 squares = []; for x in range(10): squares.append(x**2) — 3줄.
한 줄로 같은 일을 하는 셈입니다.
조건도 추가할 수 있습니다.
evens = [x for x in range(10) if x % 2 == 0] — 0~9 중 짝수만.
「[표현식 for 변수 in 컬렉션 if 조건]」 형식입니다.
「if-else」를 표현식 자리에 넣어 「["짝" if x%2==0 else "홀" for x in range(5)]」 같은 변환도 가능합니다.
이중 for도 가능합니다.
pairs = [(x, y) for x in [1,2,3] for y in ["a","b"]].
(1,a), (1,b), (2,a), ...
같은 식의 모든 조합.
다중 for의 순서는 일반 for를 안쪽에서 바깥쪽으로 풀어 쓴 것과 같은 순서입니다.
리스트뿐 아니라 딕셔너리·집합·제너레이터도 같은 형식으로 만들 수 있습니다.
{x: x**2 for x in range(5)} — 딕셔너리 컴프리헨션.
{x for x in [1,1,2,2,3]} — 집합 컴프리헨션.
(x**2 for x in range(10)) — 제너레이터 표현식(괄호 사용).
한 줄 요약
리스트 컴프리헨션은 [표현식 for 변수 in 컬렉션 if 조건] 형식으로 한 줄에 새 리스트를 만드는 파이썬다운 표현이며, 딕셔너리·집합·제너레이터에도 같은 형식이 적용됩니다.
더 알아볼 것
- 언제 컴프리헨션 대신 일반 for를 써야 하나
- 제너레이터 표현식 — 메모리 효율적 변형
- 중첩 컴프리헨션의 가독성 한계