원소를 나열해 객체를 만들 때, 원소가 많으면 나열하기 어려움
간단한 표현식을 작성하는 것이 컴프리헨션
- 리스트, 딕셔너리, 집합 클래스는 객체를 만들 때 컴프리헨션 방식 사용해서 객체를 만들음!
n = [1,2,3,4,5]
m = map(lambda x : x*x, n)
m
>> mamp at 0X~~~~>
!! map 클래스에서 생산된 객체는 반복자로 실제 실행된 객체가 아님
!! 리스트로 변환하려면 대괄호 안에 이 객체를 넣고 별표 붙이기
[*m]
>> [1,4,9,16,25]
===== 컴프리헨션으로 작성해보자!!==============
n = [x*x for x in n]
print(n)
> [1,4,9,16,25]
lh = [1,4,9,16,25]
f = filter(lambda x : x%2 == 0, lh]
f #filter 클래스의 객체가 생성
> filter at 0x50~~~~
[*f] #원소를 나열하려면 대괄호에 넣고 별표 붙여서 원소 꺼내기!
> [4,16]
===== 컴프리헨션으로 작성해보자!!================
ll = [1,2,3,4,5]
lhl = [x*x for x in ll if x % 2 ==0]
# 필터는 for문 다음에 if문을 사용해서 정의
print(lhl)
>> [4,16]
n = [('a',1),('b',2)] #2개의 원소를 가진 튜플이 있음
def t(x):
x = list(x) # 튜플 리스트로 변환
x[1] = x[1] * x[1] # 첫번째 원소를 곱해서 첫번째 원소에 할당
x = tupel(x)
return x
d = map(lambda x : t(x), n)
print([*d])
> [('a',1),('b',4)]
========딕셔너리 컴프리헨션으로 작성해보자!!=================
n = [('a',1),('b',2)]
k = {x:y*y for x,y in n}
print(k)
> {'a':1, 'b':4}
컴프리헨션으로 함수를 불러올 때는?
def power(x): return x*x n = [power(x) for x in range(3)] print(n) > [0,1,4]
👀 예제풀기 1
다음과 같은 도시목록의 리스트가 주어졌을때, 도시이름이 S로 시작하지 않는 도시만 리스트로 만들 때 리스트 컴프리헨션을 사용하여 함수를 작성해 보세요.
cities = ["Tokyo","Shanghai","Jakarta","Seoul","Guangzhou","Beijing","Karachi","Shenzhen","Delhi" ]
not_s_city = [x for x in cities if x[0] != 'S']
print(not_s_city)
👀 예제풀기 2
다음과 같은 도시, 인구수가 튜플의 리스트로 주어졌을때, 키가 도시, 값이 인구수인 딕셔너리를 딕셔너리 컴프리헨션을 사용한 함수를 작성해 보세요.
population_of_city = [('Tokyo', 36923000), ('Shanghai', 34000000), ('Jakarta', 30000000), ('Seoul', 25514000),
('Guangzhou', 25000000), ('Beijing', 24900000), ('Karachi', 24300000), ( 'Shenzhen', 23300000), ('Delhi', 21753486)]
pop_city = {x:y for x,y in population_of_city}
print(pop_city)