Programming

; develop a program

Back-End/Python

[Python] 컴프리헨션(Comprehension)

Clloud_ 2022. 9. 24. 12:34
반응형

이번 포스팅에서는 파이썬의 컴프리헨션(Comprehension)에 대하여 공부를 해보고자 한다.

 

아래의 글들을 먼저 보고 오면 이해하는데 도움이 될 것이다.

2022.09.21 - [Python/파이썬 기초] - [Python] 제어문 - 조건문(Condition Statements)

 

[Python] 제어문 - 조건문(Condition Statements)

이번 포스팅에서는 파이썬의 3가지 제어문 중 하나인 조건문(Condition Statements)에 대하여 공부를 해보고자 한다. 조건문(Condition Statements) 조건문은 주어진 조건식의 결과(True/False)에 따라 다른 명

c11oud.tistory.com

 

2022.09.22 - [Python/파이썬 기초] - [Python] 제어문 - 반복문(iteration statements)

 

[Python] 제어문 - 반복문(iteration statements)

이번 포스팅에서는 파이썬의 3가지 제어문 중 하나인 반복문(iteration statements)에 대하여 공부를 해보고자 한다. 반복문(iteration statements) 반복문은 프로그램 내에서 똑같은 명령을 일정 횟수만큼

c11oud.tistory.com

 


컴프리헨션(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]

 


반응형