안녕세계

[Python] Comprehension (List, Set, Dictionary) 본문

[Python] Comprehension (List, Set, Dictionary)

Junhong Kim 2018. 3. 30. 10:57
728x90
반응형

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 Comprehensionchoice 함수를 이용하고,

중복을 허용하지 않을 경우 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


728x90
반응형
Comments