+ 개발

리스트 컴프리헨션(List Comprehension)

AI.Logger 2024. 9. 11. 00:25
  • 수업 내용 리마인드 및 아카이빙 목적의 업로드


 

파이썬에서 리스트 컴프리헨션(List Comprehension)은 반복문을 사용해 리스트를 생성하는 방법을 더 직관적이고 간결하게 표현할 수 있는 강력한 도구입니다. 반복문을 이용한 리스트 생성 방식보다 코드의 가독성을 높이고 실행 속도도 더 빠른 장점이 있어요. 이 글에서는 리스트 컴프리헨션의 기본 구조와 다양한 예시를 통해 어떻게 사용되는지 알아볼게요.

 

1. 리스트 컴프리헨션 기본 구조

리스트 컴프리헨션의 기본 구조는 다음과 같아요.

  • 기본 구조:
    result = [표현식 for 변수 in 리스트]
  • 조건문이 포함된 구조:
    result = [표현식 for 변수 in 리스트 if 조건문]
  • 중첩 for문 구조:
    result = [표현식 for 변수1 in 리스트1 for 변수2 in 리스트2]

 

2. 단일 for문 리스트 컴프리헨션

1) for문이 1개일 때

기존의 for문을 이용한 리스트 생성 방식과 리스트 컴프리헨션을 비교해 볼게요.

# 기존 for문
numbers = []
for x in range(1, 6):
    numbers.append(x)
print(numbers)  # 결과: [1, 2, 3, 4, 5]

# 리스트 컴프리헨션
numbers = [x for x in range(1, 6)]
print(numbers)  # 결과: [1, 2, 3, 4, 5]

리스트 컴프리헨션을 사용하면 for문을 한 줄로 간결하게 표현할 수 있어요.

 

2) for문이 1개이고 if 조건이 있을 때

조건문을 사용해 짝수만 리스트에 추가해볼게요.

# 기존 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문이 1개이고 if-else 조건이 있을 때

if-else 문도 리스트 컴프리헨션에서 사용할 수 있어요.

# 기존 for문
even_or_odd = []
for x in range(1, 6):
    if x % 2 == 0:
        even_or_odd.append("짝수")
    else:
        even_or_odd.append("홀수")
print(even_or_odd)  # 결과: ['홀수', '짝수', '홀수', '짝수', '홀수']

# 리스트 컴프리헨션
even_or_odd = ["짝수" if x % 2 == 0 else "홀수" for x in range(1, 6)]
print(even_or_odd)  # 결과: ['홀수', '짝수', '홀수', '짝수', '홀수']

 

3. 중첩 for문 리스트 컴프리헨션

리스트 컴프리헨션은 중첩된 for문도 한 줄로 표현할 수 있습니다.

 

1) for문이 2개일 때

# 기존 for문
combinations = []
for x in range(1, 4):
    for y in 'ABC':
        combinations.append((x, y))
print(combinations)  # 결과: [(1, 'A'), (1, 'B'), (1, 'C'), (2, 'A'), (2, 'B'), (2, 'C'), (3, 'A'), (3, 'B'), (3, 'C')]

# 리스트 컴프리헨션
combinations = [(x, y) for x in range(1, 4) for y in 'ABC']
print(combinations)  # 결과: [(1, 'A'), (1, 'B'), (1, 'C'), (2, 'A'), (2, 'B'), (2, 'C'), (3, 'A'), (3, 'B'), (3, 'C')]

중첩된 for문을 사용하면 리스트 컴프리헨션에서도 이와 동일한 결과를 얻을 수 있습니다.

 

2) for문이 2개이고 if 조건이 있을 때

# 기존 for문
filtered_combinations = []
for x in range(1, 4):
    if x % 2 == 0:
        for y in 'ABC':
            filtered_combinations.append((x, y))
print(filtered_combinations)  # 결과: [(2, 'A'), (2, 'B'), (2, 'C')]

# 리스트 컴프리헨션
filtered_combinations = [(x, y) for x in range(1, 4) if x % 2 == 0 for y in 'ABC']
print(filtered_combinations)  # 결과: [(2, 'A'), (2, 'B'), (2, 'C')]

 

3) for문이 2개이고 if-else 조건이 있을 때

# 기존 for문
results = []
for x in range(1, 4):
    for y in 'ABC':
        if x % 2 == 0:
            results.append((x, y))
        else:
            results.append((x, y.lower()))
print(results)  # 결과: [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'A'), (2, 'B'), (2, 'C'), (3, 'a'), (3, 'b'), (3, 'c')]

# 리스트 컴프리헨션
results = [(x, y if x % 2 == 0 else y.lower()) for x in range(1, 4) for y in 'ABC']
print(results)  # 결과: [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'A'), (2, 'B'), (2, 'C'), (3, 'a'), (3, 'b'), (3, 'c')]

 

 

리스트 컴프리헨션은 기존의 for문을 간결하고 직관적으로 표현할 수 있는 파이썬의 강력한 도구입니다. 코드의 가독성을 높일 뿐만 아니라, 실행 속도도 빠르다는 장점이 있어요. 리스트 컴프리헨션을 활용하면 한 줄로 다양한 리스트 생성과 변환 작업을 손쉽게 할 수 있답니다.

  • 단일 for문이나 중첩 for문을 간단하게 변환 가능
  • if 조건문if-else 조건문도 간결하게 표현 가능