리스트 컴프리헨션(list comprehension)
리스트 컴프리헨션이란 새로운 리스트를 만들 때 사용할 수 있는 반복문이다. 리스트와 마찬가지로 대괄호 []
를 사용해 작성한다. 일반 for 반복문보다 간결하게 표현할 수 있다는 장점이 있지만 조건이 많아지거나 반복이 중첩될 경우 코드 가독성이 떨어진다는 단점이 있다.
[표현식 for 원소 in 반복 가능한 객체]
[표현식 for 원소 in 반복 가능한 객체 if 조건문]
일반 for 반복문과 동일한 기능이기 때문에 for문을 리스트 컴프리헨션으로 표현하는 것도, 그 반대도 가능하다.
1부터 10까지 숫자 중 홀수만 뽑아내는 for문을 리스트 컴프리헨션으로 바꿔보자.
odd_numbers = []
for element in range(1,11):
if (element % 2) == 1:
odd_numbers.append(element)
odd_numbers = [element for element in range(1,11) if element % 2 == 1]
print(odd_numbers)
# 출력값
[1, 3, 5, 7, 9]
Q1. 다음과 같은 도시목록의 리스트가 주어졌을때, 도시이름이 S로 시작하지 않는 도시만 리스트로 만들 때 리스트 컴프리헨션을 사용하여 함수를 작성해 보세요.
cities = ['Tokyo', 'Shanghai', 'Jakarta', 'Seoul', 'Guangzhou', 'Beijing', 'Karachi', 'Shenzhen', 'Delhi']
A1.
city_name = [city for city in cities if city[0] != 'S']
print(city_name)
# 출력값
['Tokyo', 'Jakarta', 'Guangzhou', 'Beijing', 'Karachi', 'Delhi']
Q2. 다음과 같은 도시, 인구수가 튜플의 리스트로 주어졌을때, 키가 도시 값이 인구수인 딕셔너리를 딕셔너리 컴프리헨션을 사용한 함수를 작성해 보세요.
population_of_city = [(‘Tokyo', 36923000), (‘Shanghai', 34000000), (‘Jakarta', 30000000), (‘Seoul', 25514000), (‘Guangzhou', 25000000), (‘Beijing', 24900000), (‘Karachi', 24300000 ), ( ‘Shenzhen', 23300000), (‘Delhi', 21753486) ]
A2.
dict_city = { population_of_city[i][0]: population_of_city[i][1] for i in range(len(population_of_city) - 1)}
print(dict_city)
# 출력값
{'Tokyo': 36923000, 'Shanghai': 34000000, 'Jakarta': 30000000, 'Seoul': 25514000, 'Guangzhou': 25000000, 'Beijing': 24900000, 'Karachi': 24300000, 'Shenzhen': 23300000}