Python

[Python] 컴프리헨션(Comprehension)

Dahee.jo 2022. 2. 4. 11:19
SMALL

Definition

하나 이상의 순회 가능한 객체로부터 파이썬의 자료구조(리스트, 딕셔너리, 셋, 제너레이터)를 만드는 방법

 

 (1) List Comprehension

1~5까지의 정수를 저장하는 리스트를 만드는 방법

nums = [1,2,3,4,5]
nums=[]
nums.append(1)
...
nums.append(5)
nums[]
for n in range(1,6):
	nums.append(n)
nums=list(range(1,6))

위 방법들보다 더 간단하게 표현할 수 있는 방법이 바로 리스트 컴프리헨션이다.

#형식: [(식) for (항목) in (itrable object)]
nums=[n for n in range(1,6)] #[1,2,3,4,5]

이 외에도 기존 방법들보다 더 다양한 형태의 리스트를 만들 수 있다.

numString = [str(n) for n in range(1,6)] #['1','2','3','4','5']
evenNum = [n for n in range(1,6) if n % == 0] #[2,4]
matrix = [(row, col) for row in [1,2,3] for col in [1,2]] 
#[(1, 1), (1, 2), (2, 1), (2, 2), (3, 1), (3, 2)]

 (2) Dictionary Comprehension

#형식: {(키 표현식):(값 표현식) for (항목) in (iterable object)}
#예시
s = 'Python is easy to learn'
count = {letter:s.count(letter) for letter in s}
#count = {'P': 1, 'y': 2, 't': 2, 'h': 1, 'o': 2, 'n': 2, ' ': 4, 'i': 1, 's': 2, 'e': 2, 'a': 2, 'l': 1, 'r': 1}

(3) Set Comprehension : 순서가 없는 리스트와 다름없기 때문에 리스트 컴프리헨션과 비슷하지만, [ ] 대신 { }를  사용한다.

 

(4) Generator Comprehension

역시 리스트 컴프리헨션과 비슷하지만, [ ] 대신 ( ) 를 사용한다.

아래는 0 ~ 9 사이 정수 중 홀수 를 list 와 generator object 로 생성한 예제이다. 

>>> [ i for i in xrange(10) if i % 2 ]
[1, 3, 5, 7, 9]
>>> ( i for i in xrange(10) if i % 2 )
<generator object <genexpr> at 0x7f6105d90960>

 

 

반응형