리스트 컴프리헨션(List Comprehension)은 파이썬에서 간결하고 효율적인 리스트 생성 기법입니다. 기존 리스트를 변형하거나 특정 조건을 만족하는 요소를 필터링하는 데 유용하며, 일반적인 for
루프보다 가독성이 뛰어나고 실행 속도도 빠릅니다.
이번 글에서는 기본 개념부터 중첩 리스트 처리, 성능 비교, 그리고 실전 활용법까지 리스트 컴프리헨션의 모든 것을 깊이 있게 다뤄보겠습니다.
1. 리스트 컴프리헨션이란?
1.1 리스트 컴프리헨션 개념
리스트 컴프리헨션(List Comprehension)이란, 반복문과 조건문을 한 줄의 표현식으로 결합하여 리스트를 생성하는 기법입니다. 기존 for
루프 방식보다 코드가 짧고 직관적이며, 실행 속도도 향상됩니다.
1.2 기본 문법
리스트 컴프리헨션의 기본 구조는 다음과 같습니다.
new_list = [expression for item in iterable if condition]
구성 요소:
- expression: 새 리스트의 각 요소를 변형하는 연산
- item: iterable(반복 가능한 객체)에서 가져온 요소
- iterable: 리스트, 튜플, 문자열,
range()
등 반복 가능한 객체 - condition (선택 사항): 특정 조건을 만족하는 경우만 리스트에 포함
2. 기본적인 리스트 컴프리헨션 예제
2.1 숫자 리스트 변형
아래 코드는 0부터 9까지의 숫자의 제곱값을 리스트로 생성하는 예제입니다.
squares = [x**2 for x in range(10)]
print(squares)
출력:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
💡 전통적인 for
루프 방식과 비교
squares = []
for x in range(10):
squares.append(x**2)
print(squares)
리스트 컴프리헨션을 사용하면 더 간결하고 직관적인 코드를 작성할 수 있습니다.
3. 조건을 추가한 리스트 컴프리헨션
3.1 특정 조건을 만족하는 값만 포함하기
리스트 컴프리헨션에서는 if
조건을 추가하여 특정 요소만 필터링할 수 있습니다.
✅ 짝수의 제곱값만 포함하는 리스트
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)
출력:
[0, 4, 16, 36, 64]
if x % 2 == 0
조건을 추가하여 짝수인 경우에만 제곱값을 리스트에 포함하도록 합니다.
4. 중첩된 리스트 컴프리헨션
4.1 다중 for
문 사용
리스트 컴프리헨션은 여러 개의 for
문을 중첩하여 사용할 수도 있습니다.
✅ 두 개의 리스트에서 모든 조합 생성
colors = ['red', 'green', 'blue']
sizes = ['S', 'M', 'L']
combinations = [color + size for color in colors for size in sizes]
print(combinations)
출력:
['redS', 'redM', 'redL', 'greenS', 'greenM', 'greenL', 'blueS', 'blueM', 'blueL']
💡 전통적인 for
루프 방식과 비교
combinations = []
for color in colors:
for size in sizes:
combinations.append(color + size)
print(combinations)
이처럼 리스트 컴프리헨션을 활용하면 코드를 훨씬 더 간결하게 작성할 수 있습니다.
5. 다양한 리스트 컴프리헨션 활용법
5.1 문자열 변환
words = ["hello", "world", "python"]
uppercase_words = [word.upper() for word in words]
print(uppercase_words)
출력:
['HELLO', 'WORLD', 'PYTHON']
5.2 리스트 내 특정 요소 필터링
numbers = [10, 25, 37, 40, 51]
filtered = [num for num in numbers if num > 30]
print(filtered)
출력:
[37, 40, 51]
5.3 중첩 리스트(2차원 리스트) 펼치기
2차원 리스트를 1차원 리스트로 변환하는 방법입니다.
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flatten = [num for row in matrix for num in row]
print(flatten)
출력:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
6. 리스트 컴프리헨션과 성능 비교
리스트 컴프리헨션은 일반적인 for
루프보다 빠른 실행 속도를 보이는 경우가 많습니다.
6.1 for
루프 vs 리스트 컴프리헨션 성능 비교
import time
# for 루프 실행 시간 측정
start = time.time()
squares = []
for x in range(10**6):
squares.append(x**2)
end = time.time()
print("For 루프 실행 시간:", end - start)
# 리스트 컴프리헨션 실행 시간 측정
start = time.time()
squares = [x**2 for x in range(10**6)]
end = time.time()
print("리스트 컴프리헨션 실행 시간:", end - start)
리스트 컴프리헨션을 사용하면 내부적으로 최적화된 연산이 이루어지기 때문에 실행 속도가 빠릅니다.
7. 결론: 리스트 컴프리헨션을 언제 사용할까?
✅ 코드를 간결하고 직관적으로 유지하고 싶을 때
✅ 반복문을 사용하여 새로운 리스트를 생성할 때
✅ 필터링(조건 추가) 및 변환 작업이 필요할 때
✅ 리스트의 모든 요소를 변형할 때 (map()
과 유사한 기능)
✅ 성능이 중요한 경우 (for 루프보다 빠름)
하지만 너무 복잡한 리스트 컴프리헨션은 오히려 가독성을 해칠 수 있으므로 적절한 수준에서 활용하는 것이 중요합니다.
리스트 컴프리헨션을 활용하여 더 효율적이고 가독성이 뛰어난 파이썬 코드를 작성해보세요! 🚀
'프로그래밍 > Python' 카테고리의 다른 글
고급 자료구조: 파이썬 데코레이터의 심화 활용과 이해 (0) | 2025.02.26 |
---|---|
고급 자료구조: 파이썬 제너레이터 완벽 가이드 (0) | 2025.02.26 |
파이썬 CSV 파일 처리 완벽 가이드: 데이터 저장, 읽기, 쓰기 및 실전 활용 (0) | 2025.02.25 |
파이썬 파일 입출력 완벽 가이드: 데이터 저장과 활용의 모든 것 (0) | 2025.02.25 |
파이썬 파일 입출력 완벽 가이드: 파일 열기, 닫기, 그리고 실전 활용 (0) | 2025.02.25 |