파이썬의 '리스트 컴프리헨션(list comprehension)'이라는 개념에 대해 알아보도록 하자. 참고로 한국어로 번역해 '리스트 함축'이라고 불리기도 한다.
리스트 컴프리헨션이란?
리스트 컴프리헨션은 기존의 리스트를 변환하거나 필터링하여 새로운 리스트를 생성하는 파이썬의 구문이다. 이를 통해 반복문을 사용하는 것보다 간결하고 효율적인 코드를 작성할 수 있다.
우선 기본적인 구조 먼저 살펴보자.
[표현식 for 항목 in 반복가능객체 if 조건]
- 표현식: 새로운 리스트의 각 요소를 생성하는 표현식
- for 항목 in 반복가능객체: 반복할 대상
- if 조건: 선택적으로 추가할 수 있는 필터 조건
아래 예제를 보면 더 쉽게 파악할 수 있을 것이다. 기존 리스트의 각 요소에 2를 곱한 새로운 리스트를 생성해 보자. 먼저, 리스트 컴프리헨션을 사용하지 않고 기존의 반복문을 사용하여 작성한 코드다.
numbers = [1, 2, 3, 4, 5]
doubled = []
for num in numbers:
doubled.append(num * 2)
print(doubled) # [2, 4, 6, 8, 10]
위 코드를 리스트 컴프리헨션 문법을 사용해서 바꾸어 보자.
numbers = [1, 2, 3, 4, 5]
doubled = [num * 2 for num in numbers]
print(doubled) # [2, 4, 6, 8, 10]
WOW 똑같은 역할을 하는 코드인데 아래의 경우에 눈에 띄게 코드의 양이 줄었다. 이처럼 리스트 컴프리헨션을 사용하면 반복문을 사용한 코드보다 훨씬 간결하게 동일한 결과를 얻을 수 있다.
조건이 붙는 리스트 함축
위의 기본적 구조에서도 살펴보았다시피, 리스트 컴프리헨션에는 if를 사용하여 조건을 추가할 수도 있다.
리스트에서 짝수만 추출하여 새로운 리스트를 만들어보자. 리스트 컴프리헨션을 사용하지 않은 기존의 방식으로는 아래와 같이 코드를 짤 수 있을 것이다:
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = []
for num in numbers:
if num % 2 == 0:
even_numbers.append(num)
print(even_numbers) # [2, 4, 6]
for 문 안에 if 문이 들어가면서 코드의 줄이 하나 늘었지만 리스트 컴프리헨션 문법을 사용하면 이마저도 한 줄에 나타낼 수 있다.
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [num for num in numbers if num % 2 == 0]
print(even_numbers) # [2, 4, 6]
상호곱 형태
리스트 함축은 2개의 집합의 상호곱(Cross Product) 형태로도 표현할 수 있다. 다중 for 반복문을 사용해 두 개의 리스트를 조합하여 새로운 리스트를 생성하는 방식이다. 이 경우에도 코드가 한결 간결해진 것을 볼 수 있다.
colors = ['red', 'green', 'blue']
objects = ['car', 'tree', 'sky']
combined = [f"{color} {obj}" for color in colors for obj in objects]
print(combined)
# ['red car', 'red tree', 'red sky', 'green car', 'green tree', 'green sky', 'blue car', 'blue tree', 'blue sky']
정리
위에서 살펴보았듯이, 파이썬의 리스트 컴프리헨션은 간결하고 효율적인 코드 작성을 가능하게 하는 강력한 도구이다. 반복문과 조건문을 한 줄로 작성할 수 있어 코드의 가독성과 실행 속도를 향상시킬 수 있다는 장점이 있지만, 복잡한 로직을 구현할 때는 가독성을 고려하여 적절히 사용하는 것이 중요하다.
리스트 컴프리헨션의 개념과 사용법을 잘 이해하고 활용함으로써 보다 효율적이고 깔끔한 파이썬 코드를 작성할 수 있다. 처음에는 어색할 수 있으나 코드를 많이 접하다 보면 익숙해질 것이다. 리스트 컴프리헨션을 숙지하여 파이썬 프로그래밍 실력을 한 단계 업그레이드해 보자!
'Language > Python' 카테고리의 다른 글
[Python] 파이썬 튜플 이해하기 (1) | 2025.01.17 |
---|---|
[Python] 파이썬 2차원 리스트 (생성, 접근, 활용) (0) | 2025.01.17 |
[Python] 파이썬 리스트와 함수 (값으로 호출 vs 참조로 호출) (0) | 2025.01.16 |
[Python] 파이썬 리스트 복사하기 (얕은 복사 vs 깊은 복사) (0) | 2025.01.15 |
[Python] 파이썬 리스트 비교, 정렬 (0) | 2025.01.15 |