List를 만들 때 list comprehension 을 사용하여 더 간단하게 표현된 for 반복문으로 list를 만들 수 있다.
예를 들어, 그동안 아래와 같이 for 문을 사용해 list 를 만들었다.
my_list = []
for i in range(1, 11):
my_list.append(i)
print(my_list) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
List comprehension 을 사용하면 아래와 같이 더 간단하게 만들 수 있다.
my_list = [i for i in range(1, 11)]
출력 표현식에 다음과 같이 출력 표현식에 변화를 줄 수도 있다.
my_list = [i**2 for i in range(1, 11)]
[출력표현식 for 요소 in 입력Sequence [if 조건식]]
뒤에 if 조건식을 추가할 수도 있다.
my_list = []
for i in range(1,11):
if i % 2 == 0:
my_list.append(i**2)
else:
my_list.append(i)
print(my_list) # [1, 4, 3, 16, 5, 36, 7, 64, 9, 100]
이는 아래와 같이 표현할 수 있다.
my_list = [i**2 if i%2==0 else i for i in range(1, 10)]
예제를 풀어보자.
# 다음 도시 중 "S"로 시작하지 않는 도시만 골라 리스트로 만들기
cities = ["Tokyo", "Shanghai", "Jakarta", "Seoul", "Guangzhou", "Beijing", "Karachi", "Shenzhen", "Delhi"]
# Using List comprehension
s_cities = [city for city in cities if city[0]=="s"]
print(s_cities) = ['Tokyo', 'Jakarta', 'Guangzhou', 'Beijing', 'Karachi', 'Delhi']
Comprehension 은 List 뿐 아니라 Dictionary, set 에서도 가능하다.
예시를 바로 살펴 보자. 리스트 내의 튜플을 딕셔너리로 만들 것이다.
population_of_city = [("Tokyo", 36923000), ("Shanghai", 34000000), ("Jakarta", 30000000), ("Seoul", 25514000), ("Guangzhou", 25000000), ("Beijing", 24900000), ("Karachi", 24300000), ("Shenzhen", 23300000), ("Delhi", 21753486)]
#기존 방법
population_of_city_dict = {}
for i in population_of_city:
population_of_city_dict[i[0]] = i[1]
print(population_of_city_dict)
#{'Tokyo': 36923000, 'Shanghai': 34000000, 'Jakarta': 30000000, 'Seoul': 25514000, 'Guangzhou': 25000000, 'Beijing': 24900000, 'Karachi': 24300000, 'Shenzhen': 23300000, 'Delhi': 21753486}
#Using List Comprehension
population_of_city_dict = {city[0] : city[1] for city in population_of_city}
if, else 를 추가해 보았다.
capitals = ("Seoul", "Tokyo", "Beijing", "Delhi", "Jakarta")
population_of_big_capital = {city[0]:city[1] for city in population_of_city if city[0] in capitals}
print(population_of_big_capital)
#{'Tokyo': 36923000, 'Jakarta': 30000000, 'Seoul': 25514000, 'Beijing': 24900000, 'Delhi': 21753486}
set 도 list 나 dictionary 와 같은 방식으로 사용한다.
my_list = [1, 2, 3, 4, 5]
my_set = set()
#기존 방법
for i in my_list:
my_set.add(i**2)
print(my_set) # {1, 4, 9, 16, 25}
#Using set comprehension
my_set = {i**2 for i in a}
print(my_set) # {1, 4, 9, 16, 25}
List Comprehension 을 사용하면 코드가 간결하여 새로운 배열을 만들때 특히 유용하다. 하지만 가독성을 위해서는 여러 줄의 표현식과 조건문으로 표현하는 것이 이중 for문의 복잡한 리스트 컴프리헨션 한줄로 코딩하는 것보다 나을 수 있다.