Comprehension(컴프리헨션)은 파이썬이 가지고 있는 톡특한 문법입니다.
사전적 의미로는 포함, 함축의 의미로 List(리스트), Dictionary(딕셔너리), Set(세트)를 만들때 사용합니다.
컴프리헨션은 for 문
만 사용해서 표현할 수도 있고, if 문
과 같이 조건문을 사용해서 표현할 수 있습니다.
[ 표현식 for 원소 in 반복 가능한 객체 ]
[ 표현식 for 원소 in 반복 가능한 객체 if문 ]
{ 표현식 for 원소 in 반복 가능한 객체 }
{ 표현식 for 원소 in 반복 가능한 객체 if문 }
{ 키: 벨류 for 원소 in 반복 가능한 객체 }
{ 키: 벨류 for 원소 in 반복 가능한 객체 if문 }
아무래도 이렇게 끝내는것 보다는 코드를 보시고 따라 해보는게 이해하기 쉬울겁니다.
문제1) 다음과 같은 도시목록의 리스트가 주어졌을때, 도시이름이 S로 시작하지 않는 도시만 리스트로 만들 때 리스트 컴프리헨션을 사용하여 함수를 작성해 보세요.
cities =["Tokyo", "Shanghai", "Jakarta", "Seoul", "Guangzhou",
"Beijing", "Karachi", "Shenzhen", "Delhi"]
풀이
solution=[ i for i in cities if i[0]=='S']
print(solution)
#실행결과
['Shanghai', 'Seoul', 'Shenzhen']
문제2) 다음과 같은 도시, 인구수가 튜플의 리스트로 주어졌을때,
키(key)가 도시, 값(value)이 인구수인 딕셔너리를 딕셔너리 컴프리헨션을 사용한 함수를 작성해 보세요.
population_of_city = [('Tokyo', 36923000), ('Shanghai', 34000000),
('Jakarta', 30000000), ('Seoul', 25514000), ('Guangzhou', 25000000),
('Beijing', 24900000), ('Karachi', 24300000 ), ( 'Shenzhen', 23300000),
('Delhi', 21753486) ]
풀이
solution={ i[0]:i[1] for i in population_of_city}
print(solution)
#실행결과
{'Tokyo': 36923000, 'Shanghai': 34000000, 'Jakarta': 30000000,
'Seoul': 25514000, 'Guangzhou': 25000000, 'Beijing': 24900000,
'Karachi': 24300000, 'Shenzhen': 23300000, 'Delhi': 21753486}