리스트 컴프리헨션은 기존 리스트처럼 [] 대괄호를 사용하며, 다른 점은 for 루프와 if문을 조건문으로 포함 시킬 수 있는 형식을 갖고 있습니다.
-[표현식 for 원소 in 반복 가능한 객체]
-[표현식 for 원소 in 반복 가능한 객체 if문]
-List comprehension을 통해 기존의 리스트 정의와 루프를 한번에 돌리며 코드를 좀 더 간결하게 만들 수 있습니다.
예1)
new_list = [ x for x in range(1, 11) ]
print(new_list)
이 처럼 [1,2,3,4,5,6,7,8,9,10] 리스트를 간결한 표현으로 만들어 낼 수 있습니다.
예2) if문을 포함한 리스트 컴프리헨션
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 ]
print(list_comprehension)
이 처럼 4줄로 된 코드를 한줄로 쉽게 바꿀 수 있습니다.
다음 코드는 timeit모듈을 사용하여 함수들을 1000번 실행한 시간을 측정하는 코드 입니다. 실행하는 머신에 따라 다르겠지만 일반적인 랩탑환경에서는 0부터 999를 가지는 리스트를 만드는데 일반 for loop은 0.062밀리초 리스트컴프리헨션은 0.024밀리초로 이경우에는 일반적인 for loop보다 두배정도 더 빠르게 실행됨을 확인할 수 있습니다.
import timeit
def for_loop():
num_list = []
for i in range(1000):
num_list.append(i)
def list_comprehension():
num_list = [ i for i in range(1000) ]
if __name__ == "__main__":
time1 = timeit.Timer("for_loop()", "from __main__ import for_loop")
print("for loop time = ", time1.timeit(number=1000), "milliseconds")
time2 = timeit.Timer("list_comprehension()", "from __main__ import list_comprehension")
print("list_comprehension time = ", time2.timeit(number=1000), "milliseconds")
for loop time = 0.062743696 milliseconds
list_comprehension time = 0.024242144999 milliseconds
1.다음과 같은 도시목록의 리스트가 주어졌을때, 도시이름이 S로 시작하지 않는 도시만 리스트로 만들 때 리스트 컴프리헨션을 사용하여 함수를 작성해 보세요.
cities = ["Tokyo", "Shanghai", "Jakarta", "Seoul", "Guangzhou", "Beijing", "Karachi", "Shenzhen", "Delhi" ]
##using list comprehension
cities = ['Tokyo','Shanghai','Jakarta',"Seoul","Guangzhou","Beijing","Karachi","Shenzhen","Delhi"]
new_cities = [s for s in cities if s[0] != 'S']
print(new_cities)
##Just using regular for loop
# for city in cities:
# # city = "Tokyo"
# if city[0] != 'S':
# # cities["Tokyo"]
# new_cities.append(city)
2.다음과 같은 도시, 인구수가 튜플의 리스트로 주어졌을때, 키가 도시, 값이 인구수인 딕셔너리를 딕셔너리 컴프리헨션을 사용한 함수를 작성해 보세요.
population_of_city = [(‘Tokyo', 36923000), (‘Shanghai', 34000000), (‘Jakarta', 30000000), (‘Seoul', 25514000), (‘Guangzhou', 25000000), (‘Beijing', 24900000), (‘Karachi', 24300000 ), ( ‘Shenzhen', 23300000), (‘Delhi', 21753486) ]
population_of_city = [('Tokyo', 36923000), ('Shanghai', 34000000), ('Jakarta', 30000000), ('Seoul', 25514000),
('Guangzhou', 25000000), ('Beijing', 24900000), ('Karachi', 24300000), ( 'Shenzhen', 23300000), ('Delhi', 21753486)]
my_dict = dict(population_of_city)
print(my_dict)
위와 같이 dict()를 활용한 쉬운 방법도 있지만 이번에 배운 list comprehension 을 사용해보자
population_of_city = [('Tokyo', 36923000), ('Shanghai', 34000000), ('Jakarta', 30000000), ('Seoul', 25514000), ('Guangzhou', 25000000), ('Beijing', 24900000), ('Karachi', 24300000), ( 'Shenzhen', 23300000), ('Delhi', 21753486) ]
new_dict = {x[0]:x[1] for x in population_of_city}
print(new_dict)