파이썬의 컴프리헨션(Comprehension) 사용법

파이썬의 컴프리헨션(Comprehension) 사용법

Python
파이썬의 컴프리헨션(Comprehension) 사용법
Author

gabriel yang

Published

October 2, 2024


파이썬의 컴프리헨션(Comprehension)은 리스트, 딕셔너리, 집합 등의 컬렉션을 간결하고 효율적으로 생성하는 강력한 기능입니다. 컴프리헨션을 사용하면 반복문을 간단하게 대체할 수 있어 코드의 가독성을 높이고, 실행 속도를 개선할 수 있습니다. 이번 글에서는 컴프리헨션의 사용 이유와 방법을 예제 코드와 함께 설명하겠습니다.

1. 컴프리헨션이란?

컴프리헨션은 특정 컬렉션을 생성하기 위해 제공되는 구문으로, 보통 반복문과 조건문을 사용하여 새로운 컬렉션을 쉽게 만들 수 있습니다. 파이썬에서는 주로 리스트 컴프리헨션, 딕셔너리 컴프리헨션, 집합 컴프리헨션이 사용됩니다.

기본 문법

  • 리스트 컴프리헨션:

    [expression for item in iterable if condition]
  • 딕셔너리 컴프리헨션:

    {key_expression: value_expression for item in iterable if condition}
  • 집합 컴프리헨션:

    {expression for item in iterable if condition}

2. 컴프리헨션을 사용하는 이유

컴프리헨션은 여러 가지 이유로 유용합니다:

  1. 가독성 향상: 컴프리헨션을 사용하면 반복문을 사용한 코드보다 훨씬 간결하게 표현할 수 있어 가독성이 높아집니다.
  2. 성능 향상: 파이썬의 컴프리헨션은 내부적으로 최적화되어 있어 반복문보다 빠르게 실행될 수 있습니다.
  3. 함수형 프로그래밍 스타일: 컴프리헨션은 함수형 프로그래밍의 스타일을 따르며, 코드의 일관성을 높입니다.

3. 컴프리헨션 사용 예시

예시 1: 리스트 컴프리헨션

리스트 컴프리헨션은 리스트를 생성하는 간단한 방법입니다.

# 0부터 9까지의 제곱수를 포함하는 리스트 생성
squares = [x**2 for x in range(10)]
print(squares)

출력:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

이 예시에서는 0부터 9까지의 숫자에 대한 제곱수를 계산하여 리스트를 생성합니다.

예시 2: 조건문이 포함된 리스트 컴프리헨션

조건문을 추가하여 특정 조건을 만족하는 요소만 선택할 수 있습니다.

# 짝수만 포함하는 리스트 생성
evens = [x for x in range(10) if x % 2 == 0]
print(evens)

출력:

[0, 2, 4, 6, 8]

이 예시에서는 0부터 9까지의 숫자 중에서 짝수만 선택하여 리스트를 생성합니다.

예시 3: 딕셔너리 컴프리헨션

딕셔너리 컴프리헨션은 키-값 쌍으로 이루어진 딕셔너리를 생성하는 데 사용됩니다.

# 제곱수를 키로 하고 해당 제곱수의 제곱근을 값으로 하는 딕셔너리 생성
squares_dict = {x: x**2 for x in range(6)}
print(squares_dict)

출력:

{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

이 예시에서는 0부터 5까지의 숫자를 키로 하고, 해당 숫자의 제곱수를 값으로 하는 딕셔너리를 생성합니다.

예시 4: 집합 컴프리헨션

집합 컴프리헨션은 중복을 허용하지 않는 집합을 생성하는 데 사용됩니다.

# 0부터 9까지의 제곱수를 포함하는 집합 생성
squares_set = {x**2 for x in range(10)}
print(squares_set)

출력:

{0, 1, 4, 36, 9, 16, 25, 64, 49, 81}

이 예시에서는 0부터 9까지의 숫자에 대한 제곱수를 계산하여 집합을 생성합니다. 집합이므로 중복된 값은 제거됩니다.

4. 복잡한 컴프리헨션

컴프리헨션은 중첩된 반복문을 포함할 수도 있습니다. 예를 들어, 2차원 리스트를 평탄화(flatten)할 수 있습니다.

예시: 중첩된 리스트 컴프리헨션

# 2차원 리스트 평탄화
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
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.append(num)  # 각 요소를 flattened 리스트에 추가