리스트 컴프리헨션은 새로운 리스트를 만들 때 사용할 수 있는 간단한 표현식으로 대괄호를 사용하여 작성
원소 값들은 for루프가 뒤에 따라오는 형식을 가진다.
for 문 뒤에 if문을 추가하여 조건문을 포함한 형식도 올 수 있다.
[표현식 for 원소 in 반복 가능한 객체]
[표현식 for 원소 in 반복 가능한 객체 if문]
예제로 장점부터 살펴본자.
1~10까지를 가지는 리스트
new_list = { x for x in range(1,11) }
print( new_list )
홀수 값들만 골라서 다른 리스트에 appand
odd_numbers = [ ]
for element in range(1,11):
if (element % 2) == 1:
odd_numbers.append(element)
List_comprehension = [ element for element in range(1,11) if (element%2) == 1 ]
리스트 컴프리헨션으로 작성한 코드는 간결하고 데이터베이스를 조회하여 리스트로 만들때 많이 사용된다.
🔆문제.1
다음과 같은 도시목록의 리스트가 주어졌을때, 도시이름이 S로 시작하지 않는 도시만 리스트로 만들 때 리스트 컴프리헨션을 사용하여 함수를 작성해 보세요.
cities = ["Tokyo", "Shanghai", "Jakarta", "Seoul", "Guangzhou", "Beijing", "Karachi", "Shenzhen", "Delhi" ]
🌟 1번 풀이
문제를 풀면서 처음부터 바로 컴프리헨션으로 작성하기 어려웠다. 그래서 일단 기존에 사용하던 for문을 사용하여 작성 후 변경하기로 했다.
Nos_city = []
for i in cities:
if i.find("S") != 0:
Nos_city.append(i)
append부분은 컴프리헨션으로 생략되고 반복문 조건문을 넣으니 이러한 결과가 나왔다.
Nos_city = [city for city in cities if city.find('S') != 0]
🔆 문제.2
다음과 같은 도시, 인구수가 튜플의 리스트로 주어졌을때, 키가 도시, 값이 인구수인 딕셔너리를 딕셔너리 컴프리헨션을 사용한 함수를 작성해 보세요.
population_of_city = [(‘Tokyo', 36923000), (‘Shanghai', 34000000), (‘Jakarta', 30000000), (‘Seoul', 25514000), (‘Guangzhou', 25000000), (‘Beijing', 24900000), (‘Karachi', 24300000 ), ( ‘Shenzhen', 23300000), (‘Delhi', 21753486) ]
🌟 2번 풀이
위의 문제와 동일하게 기존 for문으로 먼저 작성하였다.
dic = {}
for i in range(len(population_of_city)):
dic[population_of_city[i][0]] = population_of_city[i][1]
처음에 이해가 되지 않아 어려웠다. 조건 문으로 넣는 것도 아니고 key값과 value값을 정수나 문자열 형태가 아니라 리스트의 값들로 어떻게 하지 하다 간단히 생각하니 생각보다 쉽게 해결되었다.
dic = {population_of_city[i][0] : population_of_city[i][1] for i in range(len(population_of_city))}
key:value 부분에 원하는 값의 조건을 넣을 수 있다는 것을 깨닳았다...
dic2= dict(population_of_city)