Python Intermediate and Advanced

Python Intermediate_001: List Compression (파이썬 고급 - 리스트 컴프리헨션)

codeaddict 2024. 12. 22. 15:00

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']

리스트 컴프리헨션을 사용할 때

리스트 컴프리헨션을 사용해야 하는 경우:

  1. 반복 가능한 객체에서 리스트를 생성하려는 경우.
  2. 코드를 더 간결하고 가독성 있게 만들고 싶은 경우.
  3. 컴프리헨션 내부의 로직이 지나치게 복잡하지 않은 경우.

리스트 컴프리헨션을 피해야 하는 경우:

  1. 여러 단계가 필요한 작업이거나 이해하기 어려운 경우.
  2. 과도하게 중첩되거나 복잡한 로직으로 인해 가독성이 떨어지는 경우.