컴프리헨션 TIL#24

may_soouu·2020년 8월 5일
0

💬 컴프리헨션?

원소를 나열해 객체를 만들 때, 원소가 많으면 나열하기 어려움
간단한 표현식을 작성하는 것이 컴프리헨션

  • 리스트, 딕셔너리, 집합 클래스는 객체를 만들 때 컴프리헨션 방식 사용해서 객체를 만들음!

🔴 리스트 컴프리헨션

💨예제1

 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]

💨 예제2

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]

🟠 딕셔너리, 집합 컴프리헨션

💨 예제1

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)
profile
back-end 개발자

0개의 댓글