본문 바로가기
코딩취미/Python

리스트 컴프리헨션 구조와 사용방법: 초보자를 위한 간단한 설명과 예제

by 브링블링 2024. 9. 10.
반응형

리스트 컴프리헨션 구조와 사용방법: 초보자를 위한 간단한 설명과 예제

리스트 컴프리헨션(List Comprehension)은 파이썬에서 자주 사용되는 매우 강력한 기능입니다. 초보자에게는 처음에 다소 복잡하게 느껴질 수 있지만, 한 번 이해하고 나면 더 간결하고 효율적인 코드를 작성할 수 있습니다.

 

이 글에서는 리스트 컴프리헨션의 기본적인 목적과 특징을 간단하게 설명하고, 각 특징을 쉽게 익힐 수 있는 예제와 함께 설명합니다. 이를 통해 코드의 가독성을 높이고 반복 작업을 훨씬 더 직관적으로 처리할 수 있는 방법을 배워보세요.

 

리스트 컴프리헨션의 기본 구조

[expression for item in iterable if condition]

1. expression (표현식)

리스트에 담을 값을 정의하는 부분입니다. 이 표현식은 리스트의 각 항목에 대해 수행할 연산이나 변환을 지정합니다.
예를 들어, x**2는 리스트의 각 요소를 제곱한 값을 반환합니다.

2. for item in iterable (반복문)

이 부분은 for 루프처럼 동작하며, 리스트 컴프리헨션이 적용될 값을 정의합니다. iterable은 순회 가능한 객체 (예: 리스트, 튜플, 문자열, 범위 등)이고, item은 이 객체에서 반복되는 요소를 받는 변수입니다.

3. if condition (조건문, 선택적 요소)

선택적으로 사용할 수 있는 부분으로, 각 item이 이 조건을 만족할 때만 리스트에 포함됩니다. 조건문을 생략할 수도 있으며, 생략 시 모든 요소가 포함됩니다.

 

기본 예제

 

  • expression (x2)**: 각 x 값을 제곱하여 리스트에 담습니다.
  • for item in iterable (for x in range(5)): x는 0에서 4까지의 값을 순회하며 각 x에 대해 x**2을 계산합니다.
  • if condition: 조건문이 없으므로 모든 x가 제곱되어 리스트에 포함됩니다.

 

squares = [x**2 for x in range(5)]

 

조건문이 포함된 예제

 

  • xpression (x2)**: x의 제곱 값을 리스트에 담습니다.
  • for item in iterable (for x in range(10)): x는 0에서 9까지의 값을 순회합니다.
  • if condition (if x % 2 == 0): x가 짝수일 때만 제곱 값을 리스트에 포함합니다.

 

even_squares = [x**2 for x in range(10) if x % 2 == 0]

 

중첩된 반복문이 포함된 예제

 

  • expression ((x, y)): 각 x와 y의 조합을 튜플로 묶어 리스트에 담습니다.
  • for item in iterable (for x in range(3) for y in range(2)): 두 개의 for 문이 중첩되어, 먼저 x가 0에서 2까지, 그 다음 y가 0에서 1까지 각각 순회합니다.

 

pairs = [(x, y) for x in range(3) for y in range(2)]

 

조건문과 중첩된 반복문이 함께 있는 예제

 

  • expression ((x, y)): x와 y의 조합을 튜플로 묶어 리스트에 담습니다.
  • for item in iterable (for x in range(3) for y in range(3)): x와 y가 0에서 2까지 각각 순회합니다.
  • if condition (if x != y): x와 y가 같지 않은 경우에만 그 조합을 리스트에 포함시킵니다.

 

filtered_pairs = [(x, y) for x in range(3) for y in range(3) if x != y]
반응형

1. 리스트 컴프리헨션의 목적

리스트 컴프리헨션의 주요 목적은 짧고 읽기 쉬운 코드로 리스트를 생성하는 것입니다. 일반적인 반복문과 조건문을 사용하여 리스트를 생성하는 대신, 한 줄로 간결하게 표현할 수 있어 가독성과 코드 효율성을 크게 향상시킵니다.

 

아래의 두 코드는 동일한 결과를 출력하지만, 리스트 컴프리헨션을 사용한 코드가 훨씬 짧고 직관적입니다.

# 기존 반복문을 사용한 리스트 생성
squares = []
for x in range(10):
    squares.append(x**2)

print(squares)

# 리스트 컴프리헨션을 사용한 리스트 생성
squares_comp = [x**2 for x in range(10)]
print(squares_comp)

 

2. 리스트 컴프리헨션의 특징

리스트 컴프리헨션은 다음과 같은 여러 가지 특징을 가지고 있습니다.

2.1. 간단한 반복문 처리

리스트 컴프리헨션의 가장 기본적인 사용은 반복문을 사용하여 리스트를 생성하는 것입니다.

# 기존 방식: for문을 이용한 리스트 생성
numbers = []
for i in range(5):
    numbers.append(i)

# 리스트 컴프리헨션 사용
numbers_comp = [i for i in range(5)]

 

사용처 예) 

  • 기본적인 리스트 생성 작업
  • 간단한 데이터 처리 및 변환

2.2. 조건문을 통한 필터링

리스트 컴프리헨션은 반복문에 조건문을 추가하여 특정 조건을 만족하는 항목만 리스트에 포함할 수 있습니다.

# 기존 방식: 조건을 포함한 리스트 생성
even_numbers = []
for i in range(10):
    if i % 2 == 0:
        even_numbers.append(i)

# 리스트 컴프리헨션 사용
even_numbers_comp = [i for i in range(10) if i % 2 == 0]

 

사용처 예)

  • 데이터 필터링 작업
  • 조건에 맞는 값들만 골라 리스트를 생성하는 작업

2.3. 중첩된 반복문 처리

리스트 컴프리헨션은 중첩된 반복문도 간단하게 표현할 수 있습니다.

# 기존 방식: 중첩된 반복문을 이용한 리스트 생성
pairs = []
for x in range(3):
    for y in range(3):
        pairs.append((x, y))

# 리스트 컴프리헨션 사용
pairs_comp = [(x, y) for x in range(3) for y in range(3)]

 

사용처 예)

  • 2차원 리스트나 다중 리스트의 요소를 순회하며 처리하는 경우
  • 배열의 조합이나 좌표계산

2.4. 함수 호출과 함께 사용

리스트 컴프리헨션은 리스트를 생성하는 과정에서 함수를 호출하여 그 결과를 리스트에 포함시킬 수 있습니다.

# 기존 방식: 함수를 이용한 리스트 생성
def square(x):
    return x ** 2

squared_numbers = []
for i in range(5):
    squared_numbers.append(square(i))

# 리스트 컴프리헨션 사용
squared_numbers_comp = [square(i) for i in range(5)]

 

사용처 예)

  • 복잡한 데이터 가공 작업
  • 함수의 결과를 기반으로 한 리스트 생성

2.5. 여러 조건문을 사용한 필터링

리스트 컴프리헨션에서는 여러 개의 조건문을 사용하여 더욱 복잡한 필터링을 할 수 있습니다.

# 기존 방식: 여러 조건문을 이용한 리스트 생성
filtered_numbers = []
for i in range(20):
    if i % 2 == 0 and i % 3 == 0:
        filtered_numbers.append(i)

# 리스트 컴프리헨션 사용
filtered_numbers_comp = [i for i in range(20) if i % 2 == 0 and i % 3 == 0]

 

사용처 예)

  • 다중 조건에 따라 데이터를 필터링할 때
  • 복잡한 필터링 로직이 필요한 경우
반응형