
파이썬 리스트 컴프리헨션은 왜 편할까라는 질문은 결국 문법보다 읽기성의 문제입니다. 같은 작업을 for문으로도 할 수 있는데 많은 파이썬 코드가 comprehension을 좋아하는 이유는, 짧고 분명한 변환을 한 줄에 응축해서 보여주기 좋기 때문입니다.
다만 여기서 중요한 것은 짧다고 무조건 좋은 것이 아니라, 언제 읽기 좋아지고 언제 과해지는지를 구분하는 일입니다.
왜 for문보다 읽기 좋게 느껴질까
numbers = [1, 2, 3, 4, 5]
evens = [n for n in numbers if n % 2 == 0]이 예시는 “numbers에서 짝수만 골라 새 리스트를 만든다”는 의도가 한눈에 들어옵니다. append용 빈 리스트를 만들고, loop를 돌고, if를 걸고, append하는 과정을 펼치지 않아도 됩니다.
즉 comprehension의 장점은 속도 자랑보다, 변환 의도가 한 줄에 모인다는 점에 있습니다.
Python 공식 튜토리얼과 built-in 함수 문서를 같이 보면, 파이썬은 mutable 구조와 변환 도구를 분명하게 나눠 두고 있어 어떤 표현이 더 읽기 쉬운지 판단하는 감각이 중요해집니다.
언제 특히 잘 맞을까
- 입력 리스트가 분명하다
- 변환 로직이 짧다
- 조건이 한두 개 수준이다
- 출력 형태가 바로 리스트다
즉 “짧고 분명한 변환”이라는 조건이 붙을 때 comprehension은 아주 좋은 도구가 됩니다.
언제부터 과해질까
조건이 여러 겹으로 들어가고, 삼항 표현식이 섞이고, nested comprehension까지 붙기 시작하면 읽는 사람이 한 번에 머릿속으로 해석하기 어려워집니다.
result = [
transform(x, y)
for x in items
for y in x.children
if y.enabled and y.score > 10 and not y.deleted
]이 시점부터는 for문이 더 길어 보여도 의도를 단계별로 드러내기 쉬울 수 있습니다. 즉 comprehension의 한계는 기능이 아니라 독자가 한 번에 읽을 수 있는 복잡도입니다.
map과 filter보다 항상 나을까
그렇지는 않습니다. map과 filter도 여전히 의미가 있습니다. 다만 Python에서는 comprehension이 더 자연어처럼 읽히는 경우가 많아서 선호되는 편입니다.
- 간단한 변환과 조건 조합은 comprehension이 읽기 쉬운 편이다
- 이미 함수가 잘 분리되어 있으면 map도 충분히 자연스러울 수 있다
- 핵심은 문법 우열보다 팀이 빨리 읽을 수 있는가다
즉 파이썬스러움은 특정 문법 숭배가 아니라, 읽는 사람이 덜 멈추게 만드는 선택에 더 가깝습니다.
리스트 감각은 얕은 복사/깊은 복사 글, 반복문 가독성 감각은 enumerate 글과도 이어집니다.
마무리
파이썬 리스트 컴프리헨션이 편한 이유는 더 짧아서가 아니라, 짧고 분명한 변환 의도를 한 번에 보여주기 좋기 때문입니다.
즉 좋은 기준은 “한 줄로 줄였는가”가 아니라, 읽는 사람이 바로 이해할 수 있는가입니다. 그 선을 넘으면 for문이 다시 더 좋은 선택이 될 수 있습니다.