안녕하세요! 이번 포스팅에서는 파이썬 컴프리헨션 문법 중 하나인 리스트 컴프리헨션에 대해 알아보겠습니다.
목차
1. 리스트 컴프리헨션이란?
특정 조건을 만족하거나 반복되는 요소(element)의 리스트를 보다 간결하게 만드는 문법입니다.
2. for문을 포함한 리스트
기본 문법은 다음과 같습니다.
[반환값 for 변수 in 반복 가능한 자료형(리스트, 딕셔너리, 문자열 등)]
물론 for 변수 in range()도 사용 가능합니다.
리스트의 요소들을 제곱한 새로운 리스트를 만들어 보겠습니다.
old_list = [1, 2, 3, 4, 5]
new_list = [i**2 for i in old_list]
>>> new_list
[1, 4, 9, 16, 25]
3. for문과 if문을 포함한 리스트
기본 문법은 다음과 같습니다.
[조건 만족 반환값 for 변수 in 반복 가능한 자료형 if 조건식]
if문은 for문 뒤에 와야 합니다.
홀수를 차별하는 리스트를 만들어보겠습니다.
old_list = [1, 2, 3, 4, 5, 6]
new_list = [str(i) for i in old_list if i%2 == 0]
>> new_list
['2', '4', '6']
# 홀수 : 아 ㅡㅡ
4. for문과 if else문을 포함한 리스트
기본 문법은 다음과 같습니다.
[조건 만족 반환값 if 조건식 else 조건 만족X 반환값 for 변수 in 반복 가능한 자료형]
if else문은 for문 앞에 와야 합니다.
1부터 10까지의 정수 안에서 간단한 3, 6, 9 게임을 만들어 보겠습니다.
game = ["짝" if (i+1)%3==0 else i+1 for i in range(10)]
>>> game
[1, 2, '짝', 4, 5, '짝', 7, 8, '짝', 10]
이중 for문이나 조건을 여러 개 추가할 수 있지만 오히려 가독성이 떨어질 수 있으니 for문과 if else문 한 번씩만 사용하시는 것을 추천드립니다.
5. 활용 예제 (None값 처리 함수 만들기)
데이터 처리를 하다 보면 None값을 처리해야 하는 경우가 생깁니다.
리스트 컴프리헨션을 활용하여 None값을 0으로 바꾸는 간단한 함수를 작성해보겠습니다.
- 리스트 컴프리헨션을 사용하지 않은 경우
list 안에서 for문을 돌며 i == None인 경우 i=0으로 처리한 후 new_list에 append 해주었습니다.
price = [1200, 1300, 1500, None, None]
def none_to_zero(list):
new_list = []
for i in list:
if i == None:
i = 0
new_list.append(i)
return new_list
>>> none_to_zero(price)
[1200, 1300, 1500, 0, 0]
- 리스트 컴프리헨션을 사용한 경우
코드가 직관적이고 간결합니다. for문과 if else문을 한 줄에 넣고 append를 생략할 수 있습니다.
단, list를 돌며 모든 요소를 append 해주는 위의 코드와는 달리 else문에 i값이 None이 아닐 경우 그대로 i를 반환하는 부분을 추가해주어야 합니다.
price = [1200, 1300, 1500, None, None]
def none_to_zero(list):
new_list = [0 if i==None else i for i in list]
return new_list
>>> none_to_zero(price)
[1200, 1300, 1500, 0, 0]
활용 예제를 끝으로 포스팅을 마치겠습니다.