이번 포스팅에서는 파이썬의 컴프리헨션(Comprehension)에 대하여 공부를 해보고자 한다.
아래의 글들을 먼저 보고 오면 이해하는데 도움이 될 것이다.
2022.09.21 - [Python/파이썬 기초] - [Python] 제어문 - 조건문(Condition Statements)
2022.09.22 - [Python/파이썬 기초] - [Python] 제어문 - 반복문(iteration statements)
컴프리헨션(Comprehension)
컴프리헨션(Comprehension)은 기존 자료구조(list, set, dict)가 가진 원소들을 이용해 새로운 자료구조를 만드는 구문을 말한다. 주로 기존 자료구조 내에 원소들의 처리 결과를 새로운 자료구조에 넣을 때 사용한다.
튜플(Tuple) 컴프리헨션은 없으며, 딕셔너리/집합 컴프리헨션은 파이썬 3부터 지원한다.
[ ] 안에 표현식과 for 문이 나오고, 0개 이상의 for 이나 if 문으로 구성되는데 if 문을 사용하면 필터링(filtering)이 추가된다.
리스트(List) 컴프리헨션
리스트 컴프리헨션은 다양한 조건을 사용하여 간단하게 List를 생성할 수 있는 파이썬 문법이다.
리스트 컴프리헨션의 기본구조
[표현식 or 함수(변수명 포함) for 변수명 in iterable]
[표현식 or 함수(변수명 포함) for 변수명 in iterable if 조건문]
예제
순서 1. 리스트를 생성한다.
순서 2. for in 문을 이용해서 리스트 l의 원소들의 10배의 값을 가지는 새로운 리스트를 생성한다.
순서 3. 컴프리헨션 구문을 이용해서 리스트를 생성한다.
l = [10, 5, 20, 7, 9, 100]
new_list = []
for i in l:
new_list.append(i * 10)
new_list
new_list2 = [i*10 for i in l]
new_list2
[실행결과]
[100, 50, 200, 70, 90, 1000]
[100, 50, 200, 70, 90, 1000]
리스트 컴프리헨션에서 if 조건문을 사용할 경우
반복문 for in -> if 문으로 filter -> 변환(map) -> 새 리스트에 추가.
map(mapping)은 자료구조(iterable)의 각각의 원소들을 동일하게 처리하는 것을 말한다.
필터링(filtering)은 객체(iterable) 내 각각의 원소들 중 특정 조건이 True인 값들만 걸러내는 것을 말한다.
예제 1
순서 1. 리스트를 생성한다.
순서 2. 리스트에서 3글자 이상인 것들만 골라서 대문자로 변환한 값들을 가진 새로운 리스트를 생성한다.
순서 3. 컴프리헨션 구문을 이용해서 리스트를 생성한다.
t = ["ab", "def", "abc", "ddd", "adsdfd", "ab", "def"]
new_list3 = []
for v in t:
if len(v) >= 3:
new_list3.append(v.upper())
new_list3
new_list4 = [v.upper() for v in t if len(v) >= 3]
new_list4
[실행결과]
['DEF', 'ABC', 'DDD', 'ADSDFD', 'DEF']
['DEF', 'ABC', 'DDD', 'ADSDFD', 'DEF']
예제 2
순서 1. 0 ~ 100 사이의 정수 중에서 5의 배수만 가지는 리스트를 생성한다.
순서 2. 0 ~ 100 사이의 정수 중에서 5의 배수만 가지는 리스트를 생성한다. (컴프리핸선 구문 사용)
new_list_5 = []
for i in range(101):
if i % 5 == 0:
new_list_5.append(i)
new_list_5
result = [i for i in range(101) if i % 5 == 0]
result
딕셔너리(Dictionary) 컴프리헨션
딕셔너리 컴프리헨션은 다양한 조건을 사용하여 간단하게 dictionary를 생성할 수 있는 파이썬 문법이다.
딕셔너리 컴프리헨션의 기본구조
기본구조는 리스트 컴프리헨션과 똑같지만 딕셔너리에서는 [ ] 대신 { }를 사용하며 값을 key : value 형태로 나누어준다.
for 문에 선언된 key는 for 문 앞에 있는 key와 같다.
{k:v for k in iterable}
{k:v for k in iterable if 조건식}
예제
순서 1. for in 문을 이용해서 딕셔너리를 생성한다.
순서 2. 컴프리핸션 구문을 이용해서 딕셔너리를 생성한다.
순서 3. 컴프리핸션 구문을 이용해서 딕셔너리를 생성한다. (f - string 사용)
for idx, value in enumerate(l, start=1):
print(idx, value)
new_dict1 = {idx: value for idx, value in enumerate(l, start=1)}
new_dict1
new_dict2 = {f'value_{i}': i for i in l}
new_dict2
[실행결과]
{'value_10': 10,
'value_5': 5,
'value_20': 20,
'value_7': 7,
'value_9': 9,
'value_100': 100}
{1: 10, 2: 5, 3: 20, 4: 7, 5: 9, 6: 100}
1 10
2 5
3 20
4 7
5 9
6 100
집합(Set) 컴프리헨션
집합(Set) 컴프리헨션은 다양한 조건을 사용하여 간단하게 set를 생성할 수 있는 파이썬 문법이다.
집합(Set) 컴프리헨션의 기본구조
{표현식 for 변수명 in iterable }
{표현식 for 변수명 in iterable if 조건식 }
예제
컴프리핸션 구문을 이용해서 set을 생성
new_s = {i*10 for i in l}
new_s
[실행결과]
[100, 50, 200, 70, 90, 1000]
'Back-End > Python' 카테고리의 다른 글
[Python] 함수의 매개변수(Parameter) (0) | 2022.09.25 |
---|---|
[Python] 함수(Function) 정의 및 호출 기본 (0) | 2022.09.24 |
[Python] range 함수 (2) | 2022.09.23 |
[Python] break와 continue (0) | 2022.09.22 |
[Python] 제어문 - 반복문(iteration statements) (0) | 2022.09.22 |