본문 바로가기

Python

Python 컬렉션 Comprehension

728x90

Python은 리스트, 딕셔너리, 세트 등의 컬렉션을 간결하게 생성할 수 있도록 comprehension이라는 것을 제공한다.

컴프리헨션을 사용하면 반복문과 조건문을 결합하여 간결하게 컬렉션을 만들 수 있는데, 사용방법을 알아보자.


리스트 컴프리헨션(List Comprehension)

# 리스트 컴프리헨션
squares = [x**2 for x in range(1, 11)]
print(squares)

 

1부터 10까지의 정수의 제곱을 리스트로 만드는 리스트 컴프리헨션의 예제 코드다.


딕셔너리 컴프리헨션(Dictionary Comprehension)

# 딕셔너리 컴프리헨션
square_dict = {x: x**2 for x in range(1, 6)}
print(square_dict)

 

1부터 5까지의 정수를 key로 하고 정수의 제곱을 value로 하는 딕셔너리를 생성하는 딕셔너리 컴프리헨션의 예제 코드다.

# 딕셔너리 컴프리헨션
games = ["lol", "overwatch", "maplestory"]
fps = [144, 80, 157]

dict = {key:value for key, value in zip(games, fps) }
print(dict)

 

3가지 게임과 각 게임의 주사율을 key와 value로 하는 딕셔너리를 생성하는 딕셔너리 컴프리헨션의 예제 코드다.

 


세트 컴프리헨션(Set Comprehension)

# 집합 컴프리헨션
even_set = {x for x in range(1, 11) if x % 2 == 0}
print(even_set)

1부터 10까지의 정수 중 짝수를 원소로 하는 집합을 생성하는 세트 컴프리헨션의 예제 코드다.


그렇다면 튜플(tuple)은?

gen = (x**2 for x in range(1,11)) # 제너레이터
tup = tuple(gen) # 튜플

print(gen)
print(type(gen))
print(tup)
print(type(tup))

>> <generator object <genexpr> at 0x0000024FB1BB0430>
>> <class 'generator'>
>> (1, 4, 9, 16, 25, 36, 49, 64, 81, 100)
>> <class 'tuple'>

 

아쉽게도 튜플은 따로 컴프리헨션이 없다. 하지만 제너레이터를 이용하여 튜플 역시 간결하게 생성할 수 있다.