| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- SpringBoot
- 자바스크립트
- junit
- vscode
- js
- 자바문법
- 테스트자동화
- html
- input
- 스프링부트
- string
- 정규식
- Java
- CSS
- ArrayList
- 인텔리제이
- javascript
- list
- 배열
- junit5
- 문자열
- 단위테스트
- math
- HashMap
- Eclipse
- 자바
- Array
- Visual Studio Code
- java테스트
- IntelliJ
- Today
- Total
어제 오늘 내일
[Python 기초] 9. "세 줄을 한 줄로 끝낸다!" 파이썬의 꽃, 리스트 컴프리헨션 본문
파이썬 개발자들은 코드가 길어지는 것을 별로 좋아하지 않습니다. "어떻게 하면 더 직관적이고 짧게 쓸 수 있을까?"를 늘 고민하죠. (이런 스타일을 '파이썬스럽다', 즉 Pythonic하다고 부릅니다.)
그 Pythonic의 결정체가 바로 오늘 배울 리스트 컴프리헨션입니다. 우리말로는 '리스트 내포'라고도 부르는데, 쉽게 말해 "리스트 안에 for문을 쏙 집어넣어서, 새로운 리스트를 뚝딱 만들어내는 마법의 문법"입니다.
1. 기존 방식 vs 파이썬 방식 (비교 체험)
숫자가 담긴 리스트에서 모든 숫자에 2를 곱한 새로운 리스트를 만든다고 가정해 봅시다.
❌ 기존 방식 (일반적인 for문)
빈 바구니를 만들고, 하나씩 꺼내서, 계산하고, 다시 빈 바구니에 넣는 3단계 과정이 필요합니다.
numbers = [1, 2, 3, 4, 5]
double_numbers = [] # 1. 빈 리스트 생성
for n in numbers: # 2. 반복문 돌리기
double_numbers.append(n * 2) # 3. 계산해서 집어넣기
print(double_numbers) # 출력: [2, 4, 6, 8, 10]
✅ 파이썬 방식 (리스트 컴프리헨션)
위의 3줄짜리 코드를 단 한 줄로 압축해 버립니다.
numbers = [1, 2, 3, 4, 5]
# "n * 2를 리스트에 담을 건데, 그 n은 numbers에서 하나씩 꺼내온 거야."
double_numbers = [n * 2 for n in numbers]
print(double_numbers) # 출력: [2, 4, 6, 8, 10]
어떤가요? 처음엔 어색할 수 있지만, 영어 문장을 읽듯 뒤에서부터 앞으로 읽어보면 아주 직관적입니다.
with arrows explaining the flow]
2. 조건문(if) 필터링 섞어 쓰기
이 문법이 진짜 무서운 이유는 for문 뒤에 if문까지 딱 붙여서 원하는 데이터만 골라낼 수 있다는 점입니다.
기본 공식:[ 넣을_데이터 for 임시변수 in 리스트 if 조건식 ]
📌 예제 코드: 짝수만 골라서 제곱하기
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# "numbers에서 n을 하나씩 꺼내는데, 만약 n이 짝수(n % 2 == 0)라면, n의 제곱(n**2)을 리스트에 담아라!"
even_squares = [n ** 2 for n in numbers if n % 2 == 0]
print(even_squares)
# 출력: [4, 16, 36, 64, 100]
이걸 일반 for문으로 짰다면 for문 안에 if문이 들어가고 append를 하는 등 코드가 4~5줄로 훌쩍 길어졌을 겁니다.
3. 실무에서는 어떻게 쓰일까? (데이터 전처리)
데이터 분석이나 업무 자동화를 하다 보면 엑셀이나 텍스트 파일에서 데이터를 긁어올 때가 많습니다. 이때 데이터 주변에 지저분한 띄어쓰기(공백)나 불필요한 문자가 묻어있는 경우가 태반이죠.
리스트 컴프리헨션을 쓰면 이런 '데이터 청소'를 1초 만에 끝낼 수 있습니다.
📌 예제 코드: 지저분한 텍스트 데이터 깔끔하게 다듬기
# 웹 크롤링으로 긁어왔는데 공백이 잔뜩 묻어있는 데이터
raw_names = [" 김파이 ", "이썬 ", " 박코드", "최자동 "]
# 지난 시간에 배운 문자열 함수 .strip()을 활용합니다!
# "raw_names에서 이름을 하나씩 꺼내서, 양쪽 공백을 다 지운(strip) 다음 새 리스트로 만들어!"
clean_names = [name.strip() for name in raw_names]
print(clean_names)
# 출력: ['김파이', '이썬', '박코드', '최자동']
어떤가요? 실무에서 정말 숨 쉬듯이 쓰이는 패턴입니다. 데이터가 10만 개여도 코드는 저 한 줄이면 충분합니다.
4. ⚠️ 주의사항: 무조건 짧다고 좋은 건 아니다!
리스트 컴프리헨션이 아무리 좋아도 남용하면 독이 됩니다.
조건이 너무 복잡해서 if, else, 그리고 이중 for문까지 한 줄에 다 구겨 넣으려고 하면, 코드를 짠 본인조차 다음 날 읽지 못하는 참사가 벌어집니다.
# ❌ 너무 복잡한 리스트 컴프리헨션 (나쁜 예)
result = [x * y for x in range(10) if x % 2 == 0 for y in range(10) if y % 3 == 0]
가독성이 생명입니다. 코드가 너무 길어지고 복잡해진다면, 억지로 한 줄로 만들지 말고 원래 하던 대로 정직하게 for문과 if문을 여러 줄로 나누어 쓰는 것이 훨씬 좋은 프로그래밍 습관입니다.
📝 마치며
오늘의 핵심 요약입니다.
- 리스트 컴프리헨션은 새로운 리스트를 만들 때
for문과append를 한 줄로 압축하는 파이썬만의 문법이다. [표현식 for 변수 in 데이터]형태로 작성한다.- 맨 뒤에
if 조건을 붙여서 원하는 데이터만 쏙쏙 골라낼 수 있다. (데이터 전처리에 최고!)
지금까지 여러분은 변수, 자료형, 조건문, 반복문 등 파이썬의 '기초 체력'을 모두 다졌습니다.
이제는 내가 만든 이 훌륭한 로직들을 "이름을 붙여서 언제든 꺼내 쓸 수 있는 나만의 도구"로 만들 차례입니다.
다음 포스팅에서는 Phase 4의 첫 번째 시간, "코드의 재사용성을 극대화하는 함수(Function) 만들기"에 대해 완벽하게 파헤쳐 보겠습니다.
도움이 되셨다면 좋아요와 댓글 부탁드립니다! 🐍
'IT > Python' 카테고리의 다른 글
| [Python 기초] 11. "남이 만든 바퀴를 가져다 쓰자!" 파이썬 모듈(import)과 pip 패키지 가이드 (0) | 2026.04.11 |
|---|---|
| [Python 기초] 10. "똑같은 코드 또 쓰지 마세요!" 파이썬 함수(def)와 람다(Lambda) (1) | 2026.04.11 |
| [Python 기초] 8. "100번의 단순 노동을 단 세 줄로!" 파이썬의 for-in 반복문 완벽 가이드 (0) | 2026.04.10 |
| [Python 기초] 7. "괄호가 없어서 어색해요..." 파이썬의 생명, 들여쓰기(Indentation)와 if문 (0) | 2026.04.09 |
| [Python 기초] 6. "데이터에 이름표를 달아주자!" 파이썬 딕셔너리(Dictionary)와 집합(Set) (1) | 2026.04.09 |
