참고 자료
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 x in iterable if Conditional statement}
'Python > 파이썬 기초' 카테고리의 다른 글
파일 읽기(read), 쓰기(write), with구문- 파이썬 기초(23) (0) | 2019.01.01 |
---|---|
모듈(module)과 패키지(package), import - 파이썬 기초(22) (0) | 2018.12.29 |
함수의 입력매개변수(*args, **kwarg)와 람다표현식 - 파이썬 기초(20) (0) | 2018.12.27 |
함수 생성 및 결과출력(def, return) - 파이썬 기초(19) (0) | 2018.12.26 |
기타 흐름 제어(break, continue, else, pass) 구문 - 파이썬 기초(18) (0) | 2018.12.25 |
댓글