안녕세계
[Python] Comprehension (List, Set, Dictionary) 본문
[Python] Comprehension (List, Set, Dictionary)
Junhong Kim 2018. 3. 30. 10:57
Python comprehension
Python Comprehension
이란 다른 sequence(Iterable Object)<로 부터 변형될 수 있는 기능입니다.
Python3에서는 Python2에서 사용할 수 없는 새로운 comprehension이 추가되었습니다.
Python2
- list comprehension
Python3
- list comprehension
- set comprehension (Added)
- dictionary comprehension (Added)
List Comprehension
sequence로 부터 지정된 표현식에 따라 새로운 list
컬렉션을 빌드합니다.
# if 조건식은 생략될 수 있습니다.
[출력표현식 for 요소 in 입력시퀀스 if 조건식]
입력시퀀스
는 Iteration이 가능한 data sequence
또는 collection
입니다.
입력시퀀스를 for 루프
로 요소를 하나씩 가져오고,
if 조건식
이 있으면 해당 요소가 조건에 맞는지 체크합니다.
만약, 조건이 맞으면 출력 표현식
에 각 요소를 대입하여 출력 결과를 얻게 됩니다.
이러한 과정을 모든 요송 대해 실행하여 결과를 리스트로 반환합니다.
input_sequence = [1, 2, 'a', 'b', 3]
ret = [value * 2 for value in input_sequence if type(value) == int]
print(ret)
# [2, 4, 6]
Set Comprehension
sequence로 부터 지정된 표현식에 따라 새로운 set
컬렉션을 빌드합니다.
list comprehension과 유사하지만 결과가 {}으로 반환된다는 점이 다릅니다.
# if 조건식은 생략될 수 있습니다.
{출력표현식 for 요소 in 입력시퀀스 if 조건식}
아래 input_sequence는 중복된 값을 갖는 list인데 set은 중복을 허용하지 않기 때문에 중복된 요소는 제거되며
요소의 순서를 보장하지 않으므로 순서가 랜덤하게 바뀐 결과를 출력합니다.
input_sequence = [1, 1, 2, 'a', 'b', 3]
ret = {value * 2 for value in input_sequence if type(value) == int}
print(ret)
# {8, 2, 4, 6}
Dictionary Comprehension
sequence로 부터 지정된 표현식에 따라 새로운 set 컬렉션을 빌드합니다.
list comprehension과 유사하지만 출력 표현식이 key:value
Pair로 표현된다는 점이 다르며 dict
를 반환합니다.
# if 조건식은 생략될 수 있습니다.
{key:value for 요소 in 입력시퀀스 if 조건식}
아래 예제는 id로 이름을 찾는 dictionary를 key와 value를 바꾼 dictionary 예 입니다.
input_sequence = {1: 'kim', 2: 'lee', 3: 'park', 4: 'choi'}
ret = {value: key for key, value in input_sequence.items()}
print(ret)
# {'kim': 1, 'lee': 2, 'park': 3, 'choi': 4}
아래 예제 처럼 if 조건식 함수를 활용하여 필터링할 수도 있습니다.
def is_odd(val):
return val % 2 == 1
ret = {i: i * 2 for i in range(10) if is_odd(i)}
print(ret)
# {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
활용
list에서 random 값 추출
중복을 허용할 경우 List Comprehension
과 choice
함수를 이용하고,
중복을 허용하지 않을 경우 sample
함수를 사용합니다.
import random
count = 2
arr = ['a', 'b', 'c', 'd', 'e']
# 중복 허용 O
print([random.choice(arr) for i in range(count)])
# 중복 허용 X
print(random.sample(arr, count))
References
'Language > Python' 카테고리의 다른 글
[Python] dictionary 자료형 (0) | 2018.12.03 |
---|---|
[Python] args와 kwargs (0) | 2018.12.02 |
[Python] enumerate()를 활용한 index, value 동시 접근 (0) | 2018.03.29 |
[Python] datetime, timestamp 변환 (0) | 2018.03.26 |
[Python] List에서 dictionary 중복 제거 (1) | 2018.03.26 |