본문 바로가기
Python/파이썬 기초

리스트 컴프리헨션 - 파이썬 기초(21)

by 콩돌 2018. 12. 28.
반응형

참고 자료

https://docs.python.org/ko/3/tutorial/datastructures.html



파이썬 버전 3.7 기준



파이썬에서의 리스트 생성법


본 포스팅에서 다루는 내용은 다음과 같다.

리스트 컴프리헨션, 집합 컴프리헨션 등.

리스트 및 시퀀스형 자료형에 대한 설명은 여기를 참고한다.


각종 수열이나 특별한 법칙을 가지는 값으로 이루어진 리스트를 작성해야할 때 함수나 for문을 활용하는 방법이 있으나, 그러면 코드를 작성하는데에도 시간이 걸리며, 코드실행하는데 시간이 오래걸릴 수 있다. 이러한 상황에서 코드를 간편하게 작성할 수 있게하며, 코드실행시간을 단축실 수 있도록 파이썬은 리스트 컴프리헨션이라는 기능을 제공한다.


리스트 컴프리헨션


리스트 컴프리헨션의 형식과 단순한 예제

  ○ 리스트 컴프리헨션을 이용하면 복잡한 법칙을 가지는 리스트를 비교적 간단하게 작성하는 것이 가능하다.

  ○ 리스트 컴프리헨션은 for 절과 if 절의 조합으로 구성된다.

     ▷ if 절은 생략이 가능하다.

     ▷ for 절은 여러번 사용하는 것이 가능하다.


구문 형식의 예)

variable = [expression for x in iterable if Conditional statement]


  ○ 1부터 10까지 3를 곱한 값으로 구성된 리스트를 구하기 위한 예제는 아래와 같이 작성이 가능하다.


리스트 컴프리헨션 사용 예제)

In[75]: num = [x*3 for x in range(0,11)]

In[76]: num

Out[76]: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30]


  ○ 위의 예제에서 짝수만 솎아내고 싶으면 if 절을 활용하면 된다.


리스트 컴프리헨션 사용 예제)

In[77]: num = [x*3 for x in range(0,11) if x%2==0]

In[78]: num

Out[78]: [0, 6, 12, 18, 24, 30]



  ○ 만약 위의 for 절을 이용하여 코드를 작성한다면 아래와 같이 될 수 있다.

    ▷ 아래 예제에서 보다 싶이 컴프리헨션을 사용할 경우 코드의 길이가 상당히 짧아지고 단순해진다는 것을 알 수 있다.


리스트 컴프리헨션 사용 예제)

In[85]: num = []

In[86]: for x in range(0,11):

     ...:     if x%2 == 0:

     ...:         num.append(x*2)

     ...:

In[87]: num

Out[87]: [0, 4, 8, 12, 16, 20]



리스트 컴프리헨션의 중첩사용

  ○ 리스트 컴프리헨션은 중첩되게하여 사용이 가능하다.

  ○ 예를들어 1부터 해당 숫자까지의 합, 그중에서 짝수를 제외한 홀수만으로 구성된 리스트를 구하고 싶다면 다음과 같이 작성하면된다.

    ▷ 값 y에서의 y까지 합을 구하기 위해 리스트 컴프리헨션을 통해 구한 리스트에 sum함수 적용하였다.

    ▷ 다시 sum함수의 결과값들로 구성된 리스트를 작성하기 위해 리스트 컴프리헨션을 중첩되게 사용하였다.


리스트 컴프리헨션 중첩 사용 예제)

In[88]: num = [sum([x for x in range(0,y+1)]) for y in range(1,11) if sum([x for x in range(1,y)])%2 != 0]

In[89]: num

Out[89]: [3, 6, 21, 28, 55]


  ○ 이런 특징을 이용한다면 리스트로 이루어진 행렬을 전치시키는 것도 가능하다.



집합 컴프리헨션

  ○ 리스트 말고도 집합형 자료형에 대해서도 컴프리헨션을 지원하는데, 대괄호 [] 대신 중괄호 {}를 사용하면 된다.


구문 형식의 예)

variable = {expression for in iterable if Conditional statement}


반응형

댓글