- 수업 내용 리마인드 및 아카이빙 목적의 업로드
파이썬에서 리스트 컴프리헨션(List Comprehension)은 반복문을 사용해 리스트를 생성하는 방법을 더 직관적이고 간결하게 표현할 수 있는 강력한 도구입니다. 반복문을 이용한 리스트 생성 방식보다 코드의 가독성을 높이고 실행 속도도 더 빠른 장점이 있어요. 이 글에서는 리스트 컴프리헨션의 기본 구조와 다양한 예시를 통해 어떻게 사용되는지 알아볼게요.
1. 리스트 컴프리헨션 기본 구조
리스트 컴프리헨션의 기본 구조는 다음과 같아요.
- 기본 구조:
result = [표현식 for 변수 in 리스트] - 조건문이 포함된 구조:
result = [표현식 for 변수 in 리스트 if 조건문] - 중첩 for문 구조:
result = [표현식 for 변수1 in 리스트1 for 변수2 in 리스트2]
2. 단일 for문 리스트 컴프리헨션
1) for문이 1개일 때
기존의 for문을 이용한 리스트 생성 방식과 리스트 컴프리헨션을 비교해 볼게요.
# 기존 for문
numbers = []
for x in range(1, 6):
numbers.append(x)
print(numbers) # 결과: [1, 2, 3, 4, 5]
# 리스트 컴프리헨션
numbers = [x for x in range(1, 6)]
print(numbers) # 결과: [1, 2, 3, 4, 5]
리스트 컴프리헨션을 사용하면 for문을 한 줄로 간결하게 표현할 수 있어요.
2) for문이 1개이고 if 조건이 있을 때
조건문을 사용해 짝수만 리스트에 추가해볼게요.
# 기존 for문
even_numbers = []
for x in range(1, 11):
if x % 2 == 0:
even_numbers.append(x)
print(even_numbers) # 결과: [2, 4, 6, 8, 10]
# 리스트 컴프리헨션
even_numbers = [x for x in range(1, 11) if x % 2 == 0]
print(even_numbers) # 결과: [2, 4, 6, 8, 10]
3) for문이 1개이고 if-else 조건이 있을 때
if-else 문도 리스트 컴프리헨션에서 사용할 수 있어요.
# 기존 for문
even_or_odd = []
for x in range(1, 6):
if x % 2 == 0:
even_or_odd.append("짝수")
else:
even_or_odd.append("홀수")
print(even_or_odd) # 결과: ['홀수', '짝수', '홀수', '짝수', '홀수']
# 리스트 컴프리헨션
even_or_odd = ["짝수" if x % 2 == 0 else "홀수" for x in range(1, 6)]
print(even_or_odd) # 결과: ['홀수', '짝수', '홀수', '짝수', '홀수']
3. 중첩 for문 리스트 컴프리헨션
리스트 컴프리헨션은 중첩된 for문도 한 줄로 표현할 수 있습니다.
1) for문이 2개일 때
# 기존 for문
combinations = []
for x in range(1, 4):
for y in 'ABC':
combinations.append((x, y))
print(combinations) # 결과: [(1, 'A'), (1, 'B'), (1, 'C'), (2, 'A'), (2, 'B'), (2, 'C'), (3, 'A'), (3, 'B'), (3, 'C')]
# 리스트 컴프리헨션
combinations = [(x, y) for x in range(1, 4) for y in 'ABC']
print(combinations) # 결과: [(1, 'A'), (1, 'B'), (1, 'C'), (2, 'A'), (2, 'B'), (2, 'C'), (3, 'A'), (3, 'B'), (3, 'C')]
중첩된 for문을 사용하면 리스트 컴프리헨션에서도 이와 동일한 결과를 얻을 수 있습니다.
2) for문이 2개이고 if 조건이 있을 때
# 기존 for문
filtered_combinations = []
for x in range(1, 4):
if x % 2 == 0:
for y in 'ABC':
filtered_combinations.append((x, y))
print(filtered_combinations) # 결과: [(2, 'A'), (2, 'B'), (2, 'C')]
# 리스트 컴프리헨션
filtered_combinations = [(x, y) for x in range(1, 4) if x % 2 == 0 for y in 'ABC']
print(filtered_combinations) # 결과: [(2, 'A'), (2, 'B'), (2, 'C')]
3) for문이 2개이고 if-else 조건이 있을 때
# 기존 for문
results = []
for x in range(1, 4):
for y in 'ABC':
if x % 2 == 0:
results.append((x, y))
else:
results.append((x, y.lower()))
print(results) # 결과: [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'A'), (2, 'B'), (2, 'C'), (3, 'a'), (3, 'b'), (3, 'c')]
# 리스트 컴프리헨션
results = [(x, y if x % 2 == 0 else y.lower()) for x in range(1, 4) for y in 'ABC']
print(results) # 결과: [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'A'), (2, 'B'), (2, 'C'), (3, 'a'), (3, 'b'), (3, 'c')]
리스트 컴프리헨션은 기존의 for문을 간결하고 직관적으로 표현할 수 있는 파이썬의 강력한 도구입니다. 코드의 가독성을 높일 뿐만 아니라, 실행 속도도 빠르다는 장점이 있어요. 리스트 컴프리헨션을 활용하면 한 줄로 다양한 리스트 생성과 변환 작업을 손쉽게 할 수 있답니다.
- 단일 for문이나 중첩 for문을 간단하게 변환 가능
- if 조건문과 if-else 조건문도 간결하게 표현 가능
'+ 개발' 카테고리의 다른 글
뉴스 데이터 LSA 분석(ft. Numpy & Scikit-learn) (1) | 2024.09.13 |
---|---|
토픽 모델링(Topic Modeling)의 이해와 활용 (0) | 2024.09.12 |
파이썬의 강력한 도구들(ft. Lambda, defaultdict, map) (0) | 2024.09.10 |
단어 임베딩을 활용한 유사도 계산 (0) | 2024.09.09 |
문서 표현 기법(ft. Scikit-learn & Gensim) (1) | 2024.09.08 |