본문 바로가기
Python

파이썬 리스트 컴프리헨션의 개념과 특징을 살펴보기!

by 산코디 2024. 5. 15.

파이썬을 개발하다 보면 코드 작성 방식이 간결하면서 가독성 좋고 효율적인 경우가 정말 많다. 그중에서 오늘은 리스트 컴프리헨션에 대해서 정리해보려고 한다. 용어는 조금 어려울 수 있으나 생각보다 어렵지 않은 기법이므로 개념부터 하나씩 살펴보면서 정리해 보자.



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

리스트 컴프리헨션이란 리스트를 생성하는 방법 중 하나이며, 반복문이나 조건문을 하나의 라인으로 간단하게 코드를 작성하는 기법이다.


작성 방법

[표현식 for 항목 in iterable if 조건문]

리스트 컴프리헨션의 작성 방법은 위와 같이 배열 [] 내부에 한 줄짜리의 조건식을 넣어 값이 생성되도록 한다.

표현식은 각 항목에 대한 계산이나 변환을 나타내고, 항목은 반복할 때마다 해당 값을 가져오고, iterable은 반복 대상 객체 (리스트, 튜플, 집합 등)를 나타낸다.
그리고 마지막 조건문은 상황에 따라 선택적으로 사용하면 된다.


컴프리헨션 방식은 다양한 특징을 가지고 있다.

간결함
리스트 컴프리헨션은 한 줄의 코드로 리스트를 생성할 수 있는데, 일반적인 반복문을 사용하는 것보다 코드를 간결하게 작성할 수 있다.

가독성
리스트 컴프리헨션은 한 줄의 코드로 작성하기 때문에 가독성이 높다. 반복문과 조건문이 한 줄에 표현되므로 코드를 이해하기 쉽고 유지보수하기에 편리하다.

효율성
리스트 컴프리헨션은 내부적으로 최적화되어 있어서 일반적으로 빠르고 효율적이다. 이로 인해 코드를 실행할 때 속도와 메모리 사용량을 최적화할 수 있다.

다양성
리스트 컴프리헨션은 반복문과 조건문을 자유롭게 조합하여 다양한 기능을 수행할 수 있다. 이를 통해서 리스트를 생성하는 동시에 요소를 필터링하거나 변환할 수 있다.


이렇게 리스트 컴프리헨션 방식은 간결하면서 가독성 좋고, 효율적이면서 다양하게 활용이 가능하다는 것을 알 수 있다.




리스트 컴프리헨션의 활용

그러면 리스트 컴프리헨션 방식을 사용하여 어떤 상황에 활용하면 좋은지 간단한 예제를 통해서 알아보자.


숫자 리스트 생성

numbers = [x for x in range(1, 11)]

위의 코드는 1부터 10까지 반복문을 순회하면서 리스트를 생성하는 예제다. 위와 같이 특정 범위 내의 숫자 리스트를 생성하고자 할 때 컴프리헨션 방식을 사용한다면 아주 간단하게 처리가 가능하다.

리스트 요소 반환

names = ["Alice", "Bob", "Charlie"]
uppercase_names = [name.upper() for name in names]

위의 코드는 리스트 요소를 순회하면서 대문자로 변환하여 새 리스트로 추출하는 예제다. 위의 코드에서도 컴프리헨션 방식으로 처리하였고, 방식은 매우 간단하다. 대문자뿐만 아니라 소문자 변환, 문자 치환, 정규식 등도 간단하게 처리가 가능하다.

조건부 리스트 생성

numbers = [x for x in range(1, 11) if x % 2 == 0]

앞에서 작성한 코드에서 조건문을 추가한 예제다.
마찬가지로 컴프리헨션 방식을 사용하였고, 반복문 내에서 if문을 추가하여 해당 조건식이 일치하는 요소만 추출하여 리스트를 생성하고 있다.

이차원 배열 펼치기

nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened_list = [num for sublist in nested_list for num in sublist]

위의 코드는 이차원 배열 형태의 리스트를 풀어서 하나의 배열로 만드는 예제다. 일반적인 방법으로 처리한다면 코드가 살짝 복잡해질 수 있으나, 컴프리헨션 방식을 사용한다면 위와 같이 간단하게 처리가 가능하다. 첫 번째 반복문을 돌며 반환되는 요소(내부의 배열)를 다시 순회하면서 내부의 요소까지 접근하여 하나씩 추출하게 되는 방식이다.

딕셔너리 생성

words = ["apple", "banana", "cherry"]
word_lengths = {word: len(word) for word in words}

리스트 뿐만 아니라 딕셔너리 형태로도 처리가 가능하다. 방식은 동일하며 감싸주는 코드가 []가 아닌 {}를 사용한다.


이렇게 리스트 컴프리헨션 방식은 정말 다양한 상황에서 활용이 가능하며, 코드의 간결성과 가독성을 높여주는 매우 강력한 방법이라는 것을 알 수 있다.




리스트 컴프리헨션 사용 시 주의사항

리스트 컴프리헨션 방식으로 코드를 작성하면 코드가 간결하고 가독성이 좋지만, 사용할 때 주의해야 할 부분이 있다.


가독성 유지
리스트 컴프리헨션은 코드를 간결하게 작성하는 방법이지만, 너무 복잡하게 사용한다면 오히려 가독성이 떨어지게 된다. 그렇기 때문에 적용할 로직의 코드 복잡성을 따져보고 이를 사용하는 것이 좋다.

복잡한 로직
위의 설명과 유사한 내용이며, 너무 복잡한 로직의 경우에는 오히려 단점이 될 수 있다. 일반적으로 리스트 컴프리헨션 방식은 간단한 로직의 경우에 사용하기 적합하기 때문에 복잡한 로직이나 연산은 함수로 분리하는 등 기능을 분리하여 구현하는 것이 더 효율적이다.

너무 긴 코드
리스트 컴프리헨션 코드를 작성할 때 코드의 길이가 길어지게 되면 가독성이 현저히 떨어질 수 있으므로 코드의 라인을 나눠주거나 기능을 분리하여 사용하는 것이 좋다.

메모리 사용 주의
방대한 데이터 셋에 대한 리스트 컴프리헨션을 사용할 때에는 메모리 사용에 주의해야 한다. 리스트 컴프리헨션은 결과 리스트를 메모리에 한 번에 로드하므로, 대용량 데이터 셋의 경우는 메모리 부족 현상이 발생할 수 있다.


리스트 컴프리헨션의 방식은 가독성이 좋고 효율적이기 때문에 활용도가 높지만 위의 정리한 바와 같이 코드가 복잡해지는 경우에는 오히려 단점이 되기도 한다. 또한 대용량 처리에서는 메모리 이슈가 발생할 수 있어 무작정 컴프리헨션으로 처리하는 것보다 일반적인 방식도 같이 고민을 해야 될 것 같다.




마무리

파이썬의 코드 방식은 정말 간결하면서 효율성을 많이 선호하는 것 같다. 덕분에 코드 스타일 자체도 가독성있게 작성하는 연습을 많이 했던 것 같다. 그러나 마지막에 정리한 바와 같이 복잡한 코드를 너무 간결하게만 처리하려고 한다면 오히려 문제가 될 수 있으므로 적용할 코드에 컴프리헨션이 적절한지 고려해 보고 사용해야 할 것 같다.

 

* 경제지표 시각화 서비스

https://econoflow.co.kr

 

Economy Flow

 

econoflow.co.kr

 

반응형