파이썬의 컴프리헨션(Comprehension) 사용법
파이썬의 컴프리헨션(Comprehension) 사용법
파이썬의 컴프리헨션(Comprehension)은 리스트, 딕셔너리, 집합 등의 컬렉션을 간결하고 효율적으로 생성하는 강력한 기능입니다. 컴프리헨션을 사용하면 반복문을 간단하게 대체할 수 있어 코드의 가독성을 높이고, 실행 속도를 개선할 수 있습니다. 이번 글에서는 컴프리헨션의 사용 이유와 방법을 예제 코드와 함께 설명하겠습니다.
1. 컴프리헨션이란?
컴프리헨션은 특정 컬렉션을 생성하기 위해 제공되는 구문으로, 보통 반복문과 조건문을 사용하여 새로운 컬렉션을 쉽게 만들 수 있습니다. 파이썬에서는 주로 리스트 컴프리헨션, 딕셔너리 컴프리헨션, 집합 컴프리헨션이 사용됩니다.
기본 문법
리스트 컴프리헨션:
for item in iterable if condition] [expression
딕셔너리 컴프리헨션:
for item in iterable if condition} {key_expression: value_expression
집합 컴프리헨션:
for item in iterable if condition} {expression
2. 컴프리헨션을 사용하는 이유
컴프리헨션은 여러 가지 이유로 유용합니다:
- 가독성 향상: 컴프리헨션을 사용하면 반복문을 사용한 코드보다 훨씬 간결하게 표현할 수 있어 가독성이 높아집니다.
- 성능 향상: 파이썬의 컴프리헨션은 내부적으로 최적화되어 있어 반복문보다 빠르게 실행될 수 있습니다.
- 함수형 프로그래밍 스타일: 컴프리헨션은 함수형 프로그래밍의 스타일을 따르며, 코드의 일관성을 높입니다.
3. 컴프리헨션 사용 예시
예시 1: 리스트 컴프리헨션
리스트 컴프리헨션은 리스트를 생성하는 간단한 방법입니다.
# 0부터 9까지의 제곱수를 포함하는 리스트 생성
= [x**2 for x in range(10)]
squares print(squares)
출력:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
이 예시에서는 0
부터 9
까지의 숫자에 대한 제곱수를 계산하여 리스트를 생성합니다.
예시 2: 조건문이 포함된 리스트 컴프리헨션
조건문을 추가하여 특정 조건을 만족하는 요소만 선택할 수 있습니다.
# 짝수만 포함하는 리스트 생성
= [x for x in range(10) if x % 2 == 0]
evens print(evens)
출력:
[0, 2, 4, 6, 8]
이 예시에서는 0
부터 9
까지의 숫자 중에서 짝수만 선택하여 리스트를 생성합니다.
예시 3: 딕셔너리 컴프리헨션
딕셔너리 컴프리헨션은 키-값 쌍으로 이루어진 딕셔너리를 생성하는 데 사용됩니다.
# 제곱수를 키로 하고 해당 제곱수의 제곱근을 값으로 하는 딕셔너리 생성
= {x: x**2 for x in range(6)}
squares_dict print(squares_dict)
출력:
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
이 예시에서는 0
부터 5
까지의 숫자를 키로 하고, 해당 숫자의 제곱수를 값으로 하는 딕셔너리를 생성합니다.
예시 4: 집합 컴프리헨션
집합 컴프리헨션은 중복을 허용하지 않는 집합을 생성하는 데 사용됩니다.
# 0부터 9까지의 제곱수를 포함하는 집합 생성
= {x**2 for x in range(10)}
squares_set print(squares_set)
출력:
{0, 1, 4, 36, 9, 16, 25, 64, 49, 81}
이 예시에서는 0
부터 9
까지의 숫자에 대한 제곱수를 계산하여 집합을 생성합니다. 집합이므로 중복된 값은 제거됩니다.
4. 복잡한 컴프리헨션
컴프리헨션은 중첩된 반복문을 포함할 수도 있습니다. 예를 들어, 2차원 리스트를 평탄화(flatten)할 수 있습니다.
예시: 중첩된 리스트 컴프리헨션
# 2차원 리스트 평탄화
= [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
matrix = [num for row in matrix for num in row]
flattened print(flattened)
출력:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
이 예시에서는 2차원 리스트 matrix
를 평탄화하여 1차원 리스트로 변환합니다. 주어진 리스트 컴프리헨션 flattened = [num for row in matrix for num in row]을 일반적인 for 루프 구조로 변경하면 다음과 같은 형태가 됩니다.
= [] # 빈 리스트 생성
flattened for row in matrix: # matrix의 각 행을 순회
for num in row: # 각 행의 요소를 순회
# 각 요소를 flattened 리스트에 추가 flattened.append(num)