Python

[Python] 파이썬 리스트 컴프리헨션, None값 처리하기

Codest 2022. 8. 6. 22:21

안녕하세요! 이번 포스팅에서는 파이썬 컴프리헨션 문법 중 하나인 리스트 컴프리헨션에 대해 알아보겠습니다.

 

목차

 

1. 리스트 컴프리헨션이란?

2. for문을 포함한 리스트

3. for문과 if문을 포함한 리스트

4. for문과 if else문을 포함한 리스트

5. 활용 예제 (None값 처리 함수 만들기)

 

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]

 

활용 예제를 끝으로 포스팅을 마치겠습니다. 

반응형