리스트 컴프리헨션(List Comprehension)은 파이썬에서 많이 쓰는 문법 중 하나로
영어로 comprehension은 ‘이해력’이라는 뜻을 가진다. 하지만 프로그래밍에서의 리스트 컴프리헨션은 리스트를 더 간결하고 이해하기 쉽게 작성하는 방법을 의미한다. 즉, 기존의 반복문과 조건문을 한 줄로 표현해 새로운 리스트를 생성할 수 있는 강력한 문법이다.
1. 리스트 컴프리헨션의 기초적인 방법
리스트 컴프리헨션의 기본 구조는 아래와 같다.
[표현식 for 변수 in 반복대상]
예를 들어, 리스트의 모든 원소에 2를 곱해 새로운 리스트를 만들고 싶다면 다음과 같이 쓸 수 있다.
numbers = [1, 2, 3, 4, 5]
result = [x * 2 for x in numbers]
print(result) # [2, 4, 6, 8, 10]
이전에는 for문을 사용해 append()로 하나씩 추가했겠지만, 리스트 컴프리헨션을 사용하면 단 한 줄로 같은 결과를 얻을 수 있다.
for 뒤에는 기존 리스트를 반복하고, for 앞에는 새롭게 가공할 표현식을 작성하면 된다.
2. 리스트 컴프리헨션의 활용법 (조건문 포함)
일반적으로 리스트를 만들 때는 반복문과 조건문을 함께 사용한다.
예를 들어, 1부터 10까지 숫자 중 짝수만 골라 새 리스트를 만들고 싶다면 보통 이렇게 쓴다.
even_list = []
for i in range(1, 11):
if i % 2 == 0:
even_list.append(i)
print(even_list) # [2, 4, 6, 8, 10]
하지만 리스트 컴프리헨션을 사용하면 이 과정을 훨씬 간결하게 표현할 수 있다.
even_list = [i for i in range(1, 11) if i % 2 == 0]
print(even_list) # [2, 4, 6, 8, 10]
동작 원리는 동일하다. for문으로 순회하면서 if 조건을 만족하는 값만 새로운 리스트에 추가한다.
결과적으로 코드는 짧아지고 가독성이 높아진다.
이 패턴은 데이터 필터링이나 단순 변환을 반복적으로 수행할 때 특히 유용하다.
예를 들어, 특정 조건을 만족하는 문자열만 추려내거나, API 응답 데이터를 가공할 때도 자주 사용된다.
3. Set과 Dictionary에서도 사용 가능한 컴프리헨션
리스트뿐 아니라 set과 dict도 컴프리헨션을 지원한다.
즉, 동일한 원리로 집합(set)이나 딕셔너리(dictionary) 형태의 데이터를 한 줄로 생성할 수 있다.
1) Set Comprehension
중복을 제거하면서 새로운 집합을 만들고 싶을 때 유용하다.
numbers = [1, 2, 2, 3, 4, 4, 5]
unique = {x for x in numbers}
print(unique) # {1, 2, 3, 4, 5}
여기에 조건문을 붙일 수도 있다.
even_set = {x for x in numbers if x % 2 == 0}
print(even_set) # {2, 4}
2) Dictionary Comprehension
딕셔너리 컴프리헨션은 키와 값을 동시에 가공할 때 유용하다.
예를 들어, 1부터 5까지 숫자를 키로, 그 제곱을 값으로 가지는 딕셔너리를 만들어보자.
squares = {x: x**2 for x in range(1, 6)}
print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
조건문도 추가 가능하다.
even_squares = {x: x**2 for x in range(1, 11) if x % 2 == 0}
print(even_squares) # {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
이렇게 컴프리헨션은 리스트뿐 아니라 다양한 자료형에서 생산성을 크게 높여준다.
마무리
리스트 컴프리헨션은 파이썬의 대표적인 문법이다
간단한 반복문과 조건문은 한 줄로 표현할 수 있고, 코드의 의도가 더 명확해진다.
물론 복잡한 중첩 구조나 여러 조건이 섞인 경우에는 오히려 가독성이 떨어질 수
있으므로 한줄로 표현하면 어떨지 생각하고 써야된다.

댓글 쓰기