파이썬 특수 문법(데코레이터, 이터레이터등) - . 파이썬 Comprehension

20. 파이썬 Comprehension

  • 다른 Sequence로 부터 새로운 Sequence (Iterable Object)를 만들 수 있는 기능

20.1. list comprehension

사용법

[출력표현식 for 요소 in 입력Sequence [if 조건식]]

  • 입력 Sequence는 Iteration이 가능한 데이타 Sequence 혹은 컬렉션
  • [if 조건식] 에서 [ ] 은 리스트 괄호가 아니라, 옵션이라는 뜻, 즉 조건이 있을때만 넣으면 된다는 뜻임
  • 용어를 꼭 알아두자. 용법을 잊었을 때 용어가 익숙치 않아 용법 검색이 어려울 수 있음
In [72]:
# 예: 종류가 다른 데이터에서 정수 리스트만 가져오기
dataset = [4, True, 'Dave', 2.1, 3]
In [73]:
int_data = [num for num in dataset if type(num)==int]
In [74]:
int_data
Out[74]:
[4, 3]
In [75]:
print (type(int_data))
<class 'list'>


In [76]:
# 출력 표현식을 num * num 으로 바꿔볼까요?
int_square_data = [num * num for num in dataset if type(num)==int]
In [77]:
int_square_data
Out[77]:
[16, 9]
초간단 연습1
1. List comprehension을 사용해서 1~100까지의 숫자 출력하기
2. List comprehension을 사용해서 1~100까지의 숫자 중 3으로 나누어 떨어지는 수만 출력하기
3. List comprehension을 사용해서 1~100까지의 숫자 중 3 또는 7로 나누어 떨어지지 않는 수만 출력하기
In [ ]:
 

20.2. Set comprehension

사용법

{출력표현식 for 요소 in 입력Sequence [if 조건식]}

  • 입력 Sequence로부터 조건에 맞는 새로운 Set 컬렉션을 리턴
  • [if 조건식] 에서 [ ] 은 리스트 괄호가 아니라, 옵션이라는 뜻, 즉 조건이 있을때만 넣으면 된다는 뜻임
  • 파이썬3에서 추가됨
In [ ]:
int_data = [1, 1, 2, 3, 3, 4]
In [80]:
# 예: num * num 의 set 컬렉션 만들기
square_data_set = {num * num for num in int_data}


In [81]:
square_data_set
Out[81]:
{9, 16}
In [86]:
# 예: num * num 의 set 컬렉션 만들기 (조건 붙여보기)
square_data_set = {num * num for num in int_data if num > 3}
In [87]:
square_data_set
Out[87]:
{16}

20.3. Dictionary comprehension

사용법

{Key:Value for 요소 in 입력Sequence [if 조건식]}

  • 입력 Sequence로부터 조건에 맞는 새로운 Set 컬렉션을 리턴
  • [if 조건식] 에서 [ ] 은 리스트 괄호가 아니라, 옵션이라는 뜻, 즉 조건이 있을때만 넣으면 된다는 뜻임
  • 파이썬3에서 추가됨
In [70]:
id_name = {1: 'Dave', 2: 'David', 3: 'Anthony'}
In [71]:
id_name.items()
Out[71]:
dict_items([(1, 'Dave'), (2, 'David'), (3, 'Anthony')])
In [61]:
# 아이디가 1이상인 데이터를 이름:아이디 형식으로 새로운 set 만들기
name_id = {val:key for key,val in id_name.items() if key > 1}


In [62]:
name_id
Out[62]:
{'Anthony': 3, 'David': 2}
In [63]:
# 아이디를 10단위로 한번에 바꾸기
name_id = {key * 10:val for key,val in id_name.items()}
In [64]:
name_id
Out[64]:
{10: 'Dave', 20: 'David', 30: 'Anthony'}