파이썬 리스트 내포: 한 줄로 끝내는 반복의 마법
“파이썬은 간결하다.” 이 말의 진정한 의미를 깨닫게 해주는 문법이 있다면, 그건 바로 리스트 내포(List Comprehension)입니다. 반복문과 조건문을 한 줄로 표현하는 이 기술은, 마치 복잡한 퍼즐을 순식간에 풀어내는 마법과도 같습니다.
Thank you for reading this post, don't forget to subscribe!안녕하세요, 오늘은 파이썬의 핵심 기능 중 하나인 리스트 내포에 대해 알아보겠습니다. 이 글은 리스트 내포의 기본 문법부터 실전 예제까지, 하루에 하나씩 배워가는 시리즈의 일환으로 작성되었습니다.
1. 리스트 내포란 무엇인가?
리스트 내포(List Comprehension)는 파이썬의 반복적인 리스트 생성 작업을 한 줄로 간결하게 표현할 수 있는 문법입니다. 반복문과 조건문을 응축한 듯한 이 표현 방식은, 코드의 가독성을 높이고 작성 속도를 단축시켜 줍니다.
예를 들어, 1부터 5까지의 제곱수를 리스트로 만들고 싶다면 보통은 이렇게 작성하겠죠?
squares = [] for i in range(1, 6): squares.append(i**2)
하지만 리스트 내포를 사용하면 이렇게 간단해집니다:
squares = [i**2 for i in range(1, 6)]
짧고 강력하죠? 이게 바로 리스트 내포의 마력입니다.
2. 리스트 내포의 기본 문법
기본 형태는 다음과 같습니다:
[expression for item in iterable if condition]
구성 요소 | 설명 |
---|---|
expression | 리스트에 추가될 값 (예: i, i*2) |
for item in iterable | 순회 대상(iterable)을 반복 |
if condition | 조건을 만족하는 경우만 포함 (선택사항) |
3. 실전 예제로 배우는 리스트 내포
이제 다양한 예제를 통해 리스트 내포에 익숙해져 봅시다. 다음은 자주 사용되는 패턴입니다:
문자열에서 숫자만 추출하기:[int(ch) for ch in "a1b2c3" if ch.isdigit()]
짝수만 필터링:[i for i in range(20) if i % 2 == 0]
중첩 리스트 풀기:[num for row in [[1,2], [3,4]] for num in row]
이처럼 리스트 내포는 단순한 반복부터 중첩 구조까지, 거의 모든 리스트 처리에 활용할 수 있습니다.
4. 리스트 내포의 고급 활용법
리스트 내포는 단순한 반복을 넘어서 중첩 반복문, 조건 분기, 함수 호출까지 포함할 수 있습니다. 이로써 복잡한 데이터 구조도 우아하게 처리할 수 있죠.
예를 들어, 2차원 배열을 1차원으로 펼치는 코드도 이렇게 작성할 수 있습니다:
flattened = [num for row in matrix for num in row]
또는 조건을 다르게 분기하고 싶다면 삼항 조건식도 가능합니다:
labels = ['even' if i % 2 == 0 else 'odd' for i in range(10)]
5. 자주 하는 실수와 주의사항
실수 유형 | 설명 |
---|---|
중첩 구조 실수 | for문 순서를 헷갈리면 전혀 다른 결과가 나옵니다. |
조건문 위치 오류 | if를 어디에 놓는지가 결과값을 바꿉니다. |
과도한 로직 포함 | 복잡한 연산을 담으면 가독성이 급격히 떨어집니다. |
리스트 내포는 간결해야 합니다. 너무 많은 조건과 반복을 한 줄에 담는 건, 오히려 독이 될 수 있죠.
6. 마무리 및 요약
리스트 내포는 반복문을 간결하게 표현하는 파이썬의 문법입니다.
표현식, 반복문, 조건문을 한 줄로 작성할 수 있습니다.
과도한 로직을 담지 말고, 간결하게 유지하는 것이 핵심입니다.
팩트 베기 문장: “짧은 게 좋다고 배웠지. 하지만 그 짧음 속에, 무얼 담을지는 배운 적 없지.”
처음엔 그냥 신기했어요. 리스트 하나 만들자고 저렇게까지 할 필요가 있을까 싶었죠. 그런데 어느 날, 데이터 전처리를 하다가 for문을 네 번 중첩해 놓은 내 코드를 보고 말았어요. 그때 깨달았죠. 이건 비효율이라는 이름의 늪이라는 걸요.
✔ 핵심은 이것!
- ✅ 리스트 내포는 익숙해지면 중독된다.
- ✅ 무작정 한 줄에 모든 걸 담으려 하지 마라. 읽기 쉬운 코드가 더 좋은 코드다.
- ✅ 조건문이 들어가는 순간, 괄호 위치와 순서를 항상 더블 체크!
제가 리스트 내포를 가장 자주 쓰는 건, CSV 데이터를 불러온 다음 필요한 열만 추출할 때입니다. 한 줄이면 끝나니까요. 하지만 처음엔 자꾸 순서를 틀려서 디버깅하는 데 시간을 꽤 썼죠. 그래서 저는 리스트 내포를 쓸 땐 항상 종이에 먼저 순서를 그려보고 시작해요. 그게 작은 팁이지만 가장 확실한 팁입니다.
그건 선택의 문제가 아니었어. 그냥 내가 익숙하지 않았을 뿐이었지.
리스트 내포 작동 원리 시각화
출처: Real Python
리스트 내포 개념 영상 (5분 요약)
리스트 내포는 단순한 문법 이상의 의미를 가집니다. 사고 방식의 전환, 더 나은 코드에 대한 의지, 그리고 가독성과 효율을 동시에 추구하는 프로그래밍 철학이 담겨 있죠. 이 작은 한 줄이, 여러분의 코드 습관을 바꿔놓을 수도 있습니다.
HANSORI.AI_Blog Labs에서 더 알아보기
구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.