리스트 컴프리헨션이란 새로운 리스트를 만들 때 사용할 수 있는 간단한 표현식이다.
리스트와 마찬가지로 대괄호[,]를 사용하여 작성한다.
만들려고 하는 원소를 표현하는 표현식으로 시작하여 for 루프가 뒤에 따라오는 형식을 가진다.
For 문 뒤에 if문을 추가하여 조건문을 포함한 형식도 올 수 있다.
[표현식 for 원소 in 반복 가능한 객체][표현식 for 원소 in 반복 가능한 객체 if문]
위의 리스트 컴프리헨션 형식으로 1부터 10까지를 가지는 리스트를 만들 때 다음과 같이
리스트 컴프리헨션으로 리스트를 생성할 수 있다. 코드는 다음과 같다.
new_list = [x for x in range(1, 11) ] print(new_list)
이처럼[1,2,3,4,5,6,7,8,9,10]리스트를 간결한 표현으로 만들어 낼 수 있다.
아래 코드는 my_list 에서 홀수 값들을 다음과 같이 골라내서 for loop 바깥에 있는
odd_numbers 라는 리스트에 append하는 코드이다.
odd_numbers = [] for element in range(1,11): if (element % 2) == 1: odd_numbers.append(element)
if문을 포함하는 리스트 컴프리헨션으로 위의 코드를 바꾼다면 다음과 같다.
list_comprehension = [i for i in range(1,11) if i% 2 == 1] print(list_comprehension)
이처럼 For루프 내부에서 새로운 리스트를 만드는 For루프는 리스트 컴프리헨션으로 변환할 수 있고,
반대로 리스트 컴프리헨션 또한 for문으로 변환할 수 있다.
주어진 리스트는 다음과 같다.
cities = ["Tokyo", "Shanghai", "Jakarta", "Seoul", "Guangzhou", "Beijing", "Karachi", "Shenzhen", "Delhi" ]
코드는 다음과 같다.
list_comprehension = [i for i in cities if i[0] != "S"]
위의 코드를 for문으로 변환하면 다음과 같다.
for i in cities: if i[0] != "S": my_list.append(i)
2.다음과 같은 도시, 인구수가 튜플의 리스트로 주어졌을 때, 키가 도시, 값이 인구수인 딕셔너리를 딕셔너리 컴프리헨션을 사용한 함수를 작성.
주어진 리스트는 다음과 같다.
population_of_city = [(‘Tokyo', 36923000), (‘Shanghai', 34000000), (‘Jakarta', 30000000), (‘Seoul', 25514000), (‘Guangzhou', 25000000), (‘Beijing', 24900000), (‘Karachi', 24300000 ), ( ‘Shenzhen', 23300000), (‘Delhi', 21753486) ]
코드는 다음과 같다.
dict = { k:v * 2 for k,v in population_of_city}