Python 리스트 컴프리헨션 이해하기
Python 리스트 컴프리헨션(List Comprehensions)은 기존의 반복 가능한(iterable) 객체에서 새로운 리스트를 간결하고 효율적으로 생성하는 방법입니다. 이를 사용하면 더 짧고 가독성이 높은 Pythonic한 코드를 작성할 수 있습니다. 이 튜토리얼에서는 전통적인 for 루프 접근 방식을 먼저 보여준 후 이를 리스트 컴프리헨션으로 변환하는 방법을 설명합니다.
리스트 컴프리헨션이란?
리스트 컴프리헨션은 기존 반복 가능한 객체의 각 요소에 대해 연산을 수행하여 리스트를 생성하는 간결한 문법입니다. 조건을 추가하여 요소를 필터링할 수도 있습니다.
문법:
[expression for item in iterable if condition]
- expression: 각 요소에 대해 출력되는 값입니다.
- item: 현재 반복 중인 요소입니다.
- iterable: 반복 가능한 시퀀스(예: 리스트, range, 문자열)입니다.
- condition (선택 사항): 요소를 출력 리스트에 포함할지 여부를 결정하는 필터입니다.
리스트 컴프리헨션 예제
예제 1: 숫자의 제곱 계산하기
for 루프 사용:
numbers = [1, 2, 3, 4, 5]
squares = []
for x in numbers:
squares.append(x**2)
print(squares)
# 출력: [1, 4, 9, 16, 25]
리스트 컴프리헨션 사용:
numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers]
print(squares)
# 출력: [1, 4, 9, 16, 25]
예제 2: 짝수 필터링
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 루프 사용:
words = ['apple', 'banana', 'cherry']
uppercase_words = []
for word in words:
uppercase_words.append(word.upper())
print(uppercase_words)
# 출력: ['APPLE', 'BANANA', 'CHERRY']
리스트 컴프리헨션 사용:
words = ['apple', 'banana', 'cherry']
uppercase_words = [word.upper() for word in words]
print(uppercase_words)
# 출력: ['APPLE', 'BANANA', 'CHERRY']
예제 4: 중첩 루프 사용하기
중첩 for 루프 사용:
matrix = []
for i in range(1, 4):
for j in range(1, 4):
matrix.append((i, j))
print(matrix)
# 출력: [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
리스트 컴프리헨션 사용:
matrix = [(i, j) for i in range(1, 4) for j in range(1, 4)]
print(matrix)
# 출력: [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
예제 5: 리스트 컴프리헨션에서 조건 표현 사용하기
for 루프 사용:
numbers = [1, 2, 3, 4, 5]
labels = []
for x in numbers:
if x % 2 == 0:
labels.append("even")
else:
labels.append("odd")
print(labels)
# 출력: ['odd', 'even', 'odd', 'even', 'odd']
리스트 컴프리헨션 사용:
numbers = [1, 2, 3, 4, 5]
labels = ["even" if x % 2 == 0 else "odd" for x in numbers]
print(labels)
# 출력: ['odd', 'even', 'odd', 'even', 'odd']
리스트 컴프리헨션을 사용할 때
리스트 컴프리헨션을 사용해야 하는 경우:
- 반복 가능한 객체에서 리스트를 생성하려는 경우.
- 코드를 더 간결하고 가독성 있게 만들고 싶은 경우.
- 컴프리헨션 내부의 로직이 지나치게 복잡하지 않은 경우.
리스트 컴프리헨션을 피해야 하는 경우:
- 여러 단계가 필요한 작업이거나 이해하기 어려운 경우.
- 과도하게 중첩되거나 복잡한 로직으로 인해 가독성이 떨어지는 경우.
'Python Intermediate and Advanced' 카테고리의 다른 글
Python Intermediate_004_ Guide to PyYAML (1) | 2024.12.30 |
---|---|
Python Intermediate_003: Filter Function (0) | 2024.12.23 |
Python Intermediate_002: Map Function (파이썬 고급 - Map 함수) (3) | 2024.12.22 |
Python Intermediate_002: Map Function (English Version) (0) | 2024.12.22 |
Python Intermediate_001: List Compression (English Version) (4) | 2024.12.22 |