최근에 많은 사람들이 파이썬을 사용하면서, 관련 소스나 자료들이 많아 공부하기 좋다. 하지만 다른 고수들이 작성해 놓은 코드를 보면 문법적으로 이해하기 어려울 때도 많다. 그 중에 하나가 for문과 if문을 한 줄에 써 넣은 경우이다. 이는 '파이썬 컴프리헨션'이라고 불리는 독특한 파이썬의 문법이다.

 

파이썬 컴프리핸션은 for문과 if문을 이용해서 리스트나 딕셔너리 등의 자료형을 구현하는 방법이다. 다른 방법보다 속도도 빠르고, 직관적이기 때문에 굉장히 많이 이용된다.


오늘은 파이썬 컴프리헨션 문법, for문과 if문 한 줄에 코딩하는 방법에 대해서 알아보도록 하겠다.

 

 

파이썬 컴프리헨션 문법

 

 

1. for문을 한 줄에 작성해보자.

먼저 for문을 한 줄에 써보도록 하자. 특정 list에 값을 2배로 한다면, 우리는 이렇게 작성해 볼 수 있다.

temp = list([2, 3, 4, 5])
temp_new = list()
for i in temp:
    temp_new.append(i*2)

print(temp_new)


Out> [4, 6, 8, 10]

 


코드는 정상으로 작동하다. 파이썬 컴프리핸션 문법을 이용하면, 아래와 같이 한 줄에 작성할 수 있다. 속도도 더 빠르다.

temp_new = list([ i*2 for i in temp ])

 

 

temp는 동일하게 입력한 상태에서 for문을 한 줄로 작성하였다.

처음에는 이해하기는 어렵지만, 순서대로 작성한다고 생각하면 어렵지 않다. 예를 들어 'i에 2를 곱해서 리스트를 만드는데, 그 i는 for문으로 temp에서 가져와' 이런 식으로 말이다.

 

처음에는 사용하기 어렵지만 익숙해지만, 타이핑도 줄고 코드도 간결해진다.

동일하게 numpy의 array에서 사용할 수 있다. 다른 자료형에도 위의 문법을 이용할 수 있다.

import numpy as np

np.array([i*2 for i in temp])

 

 

2. if문을 추가하여 한 줄에 작성해보자.

컴프리핸션 문법은 조건문(if문)도 추가해서 작성할 수 있다. 위의 temp리스트에서 3보다 큰 경우에는 2를 곱하고, 3보다 작은 경우에는 그냥 list에 넣는다고 가정해보자. 아래와 같이 작성이 가능하다.

temp = list([2,3,4,5])
temp_new = list()

for i in temp:
    if i>3:
        temp_new.append(i*2)
    else:
        temp_new.append(i)

 


위의 구문도 파이썬 컴프리헨션 문법을 이용해 한 줄로 작성이 가능하다.

list( [ i * 2  if  i>3 else i for i in temp ] )

 


위의 구문도 순서대로 읽는 것이 기억하기 좋다. 'i에 2를 곱해서 리스틀 만들건데, 3보다 크면 하고 아니면 그대로 넣어. i는 for문으로 temp에서 가져와'. 필자는 해석이 좀 어색했지만, 영어의 어순 같기도 하다. 먼저 말하고 뒤에 부연설명이 붙는 순서로 읽으면 이해하기 편하다.

 

else를 제외하면 좀 이상해지는데, 이 때는 if를 뒤에 넣어야 한다.

list( [ i for i in temp if i > 3 ])

 


위와 같이 else가 없을 때는 if를 뒤에 써야 한다. 이 때는 순서대로 일기가 조금 어렵다. 동일하게 numpy의 array뿐만 아니라 다른 자료형에서도 사용이 가능하다.
 

오늘은 이렇게 파이썬 컴프리헨션 문법, for문과 if문을 한 줄로 코딩하는 방법에 대해서 알아보았다. 처음에는 사용하기 어색하다. 하지만 계속 사용하다보면 코딩수가 줄어 코드도 깔끔해지고, 해석도 생각보다 용이하다. 특히 데이터 분석 코드에서 많이 사용하는 것 같으니 익숙해지면 좋을 듯 하다.

 

리스트 뿐만 아니라 딕셔너리를 만들 때도 위의 문법을 사용하면 편리하다. 딕셔너리 자료형에 사용하는 방법에 대해서는 다음 포스팅에서 다뤄보도록 하겠다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기