2 minute read

파이썬 리스트 컴프리헨션(List Comprehension) 완벽 가이드: 간결하고 효율적인 리스트 생성의 핵심, 초보자부터 전문가까지

파이썬 리스트 컴프리헨션(List Comprehension)은 반복문과 조건문을 사용하여 간결하고 효율적으로 리스트를 생성하는 강력한 기능입니다. 리스트 컴프리헨션을 사용하면 코드의 가독성을 높이고 실행 속도를 향상시킬 수 있습니다. 이 글에서는 파이썬 리스트 컴프리헨션의 기본 개념, 다양한 활용법, 성능 최적화 방법 등을 예제 코드와 함께 자세히 설명합니다.

1. 리스트 컴프리헨션(List Comprehension)이란 무엇인가?

리스트 컴프리헨션은 다음과 같은 기능을 수행합니다.

  • 반복문(for loop)과 조건문(if statement)을 사용하여 리스트를 생성합니다.
  • 간결하고 가독성이 높은 코드를 작성할 수 있습니다.
  • 실행 속도가 빠릅니다.

2. 리스트 컴프리헨션 기본 문법

리스트 컴프리헨션의 기본 문법은 다음과 같습니다.

[expression for item in iterable if condition]
  • expression: 각 요소에 적용할 표현식입니다.
  • item: 반복 가능한 객체(iterable)의 각 요소입니다.
  • iterable: 반복 가능한 객체(리스트, 튜플, 문자열 등)입니다.
  • condition: 각 요소를 필터링하는 조건식입니다. (선택 사항)

3. 리스트 컴프리헨션 사용 예시

3.1. 리스트의 각 요소에 제곱 연산 적용

numbers = [1, 2, 3, 4, 5]
squared_numbers = [x ** 2 for x in numbers]
print(squared_numbers)  # 출력: [1, 4, 9, 16, 25]

3.2. 짝수만 추출하여 리스트 생성

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [x for x in numbers if x % 2 == 0]
print(even_numbers)  # 출력: [2, 4, 6]

3.3. 문자열 리스트를 대문자로 변환

words = ["apple", "banana", "cherry"]
upper_words = [word.upper() for word in words]
print(upper_words)  # 출력: ['APPLE', 'BANANA', 'CHERRY']

3.4. 중첩 리스트 컴프리헨션

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened_matrix = [num for row in matrix for num in row]
print(flattened_matrix)  # 출력: [1, 2, 3, 4, 5, 6, 7, 8, 9]

4. 다양한 리스트 컴프리헨션 활용

4.1. 조건부 표현식 사용

numbers = [1, 2, 3, 4, 5]
result = ["짝수" if x % 2 == 0 else "홀수" for x in numbers]
print(result)  # 출력: ['홀수', '짝수', '홀수', '짝수', '홀수']

4.2. 딕셔너리 컴프리헨션

딕셔너리 컴프리헨션을 사용하여 딕셔너리를 생성할 수 있습니다.

numbers = [1, 2, 3, 4, 5]
squared_dict = {x: x ** 2 for x in numbers}
print(squared_dict)  # 출력: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

4.3. 집합 컴프리헨션

집합 컴프리헨션을 사용하여 집합을 생성할 수 있습니다.

numbers = [1, 2, 2, 3, 3, 3]
unique_numbers = {x for x in numbers}
print(unique_numbers)  # 출력: {1, 2, 3}

4.4. 제너레이터 표현식

제너레이터 표현식은 리스트 컴프리헨션과 유사하지만, 리스트 대신 제너레이터를 생성합니다. 제너레이터는 메모리 사용량을 줄이는 데 유용합니다.

numbers = [1, 2, 3, 4, 5]
squared_generator = (x ** 2 for x in numbers)
print(squared_generator)  # 출력: <generator object <genexpr> at 0x...>

for num in squared_generator:
    print(num)  # 출력: 1, 4, 9, 16, 25

5. 리스트 컴프리헨션 성능 최적화

5.1. 반복문 대신 리스트 컴프리헨션 사용

리스트 컴프리헨션은 반복문보다 실행 속도가 빠릅니다.

# 느린 코드
result = []
for x in range(1000000):
    result.append(x ** 2)

# 빠른 코드
result = [x ** 2 for x in range(1000000)]

5.2. 불필요한 연산 제거

리스트 컴프리헨션 내부에서 불필요한 연산을 제거하여 성능을 향상시킬 수 있습니다.

5.3. 제너레이터 표현식 활용

메모리 사용량이 많은 경우 제너레이터 표현식을 사용하여 성능을 향상시킬 수 있습니다.

6. 리스트 컴프리헨션 주의사항

6.1. 가독성 유지

너무 복잡한 리스트 컴프리헨션은 가독성을 떨어뜨릴 수 있습니다. 적절한 수준에서 사용하는 것이 좋습니다.

6.2. 메모리 사용량 고려

큰 데이터셋을 처리할 때는 메모리 사용량을 고려해야 합니다. 제너레이터 표현식을 사용하여 메모리 사용량을 줄일 수 있습니다.

7. 결론

파이썬 리스트 컴프리헨션은 간결하고 효율적인 리스트 생성의 핵심 기능입니다. 다양한 활용법과 성능 최적화 방법을 익히고, 필요에 따라 적절한 방법을 선택하여 사용하면 더욱 효율적인 파이썬 코드를 작성할 수 있습니다.

Top