리스트 컴프리헨션 구조와 사용방법: 초보자를 위한 간단한 설명과 예제
리스트 컴프리헨션(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]
사용처 예)
- 다중 조건에 따라 데이터를 필터링할 때
- 복잡한 필터링 로직이 필요한 경우
'코딩취미 > Python' 카테고리의 다른 글
파이썬 기초: print()로 간단하게 테이블 만들기(+format()함수) (0) | 2024.09.13 |
---|---|
파이썬 초보자가 알아야 할 딕셔너리 사용법 및 업데이트 요령 (0) | 2024.09.12 |
QTreeView 트리구조 생성 및 사용방법(+이벤트 처리) (0) | 2024.09.10 |
exec()에서 사용자 입력(악성코드) 동작 방지방 (0) | 2024.09.09 |
eval() 에서 악의적인 코드 실행 방지하기 : 보안 위험 방지 (0) | 2024.09.05 |