Language/Python
[파이썬(Python)] 컴프리헨션(Comprehension)
Reife
2023. 3. 2. 19:53
파이썬의 컴프리헨션은 새로운 리스트, 셋, 딕셔너리와 같은 자료형을 간결하게 만들어주는 문법입니다.
보통 해당 자료형 내에 어떤 엘리먼트가 들어가는지 한 줄 안에 명시합니다.
List Comprehension
iterable한 오브젝트를 반복적으로 돌면서 새로운 리스트를 만듭니다. 이때 반복문의 요소들은 조건 내에서 식이 적용된 형태로 새 리스트에 저장됩니다.
문법 구조
[식 for 변수 in iterable한 객체 if 조건]
even_numbers = [i for i in range(1, 21) if i % 2 == 0]
위 식을 살펴보면, even_numbers라는 새로운 리스트에, 주어진 조건을 만족하고, 식이 적용된 i가 엘리먼트로 삽입됩니다.
여기서 변수 i는 iterable한 객체 range를 통해 1부터 20까지 값을 갖게 되고, 이 값은 2로 나누었을 때 나머지가 0이라는 조건을 만족하면 리스트에 삽입됩니다.
위의 리스트 컴프리헨션 예시를 기존 for문으로 바꾸면 다음과 같습니다.
even_numbers = []
for i in range(1, 21):
if i % 2 == 0:
even_numbers.append(i)
Dictionary Comprehension
위에서 다룬 컴프리헨션에 대괄호 [ ] 대신 중괄호 { }를 이용하면 셋 컴프리헨션이 되고, 이때 하나의 엘리먼트가 딕셔너리의 key: value 형태를 띄면 dictionary comprehension이 됩니다. 예를 들면 다음과 같습니다.
scores = {'Wayne': 9, 'Bastian': 5, 'Alejandro': 7, 'Markus': 9, 'Casemiro': 9}
scores = { name: score for name, score in scores.items() if name != 'Casemiro'}
결과
{'Wayne': 9, 'Bastian': 5, 'Alejandro': 7, 'Markus': 9}
Tuple Comprehension
데이터가 변경되지 않는다면 튜플을 사용하는 것이 좋습니다. 튜플의 표현식은 이렇습니다.
even_squares = tuple(i**2 for i in range(2, 21, 2)