[Python] 3_List comprehension

ksooj·2020년 8월 24일
0

Python

목록 보기
2/6
post-thumbnail

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 을 사용하면 아래와 같이 더 간단하게 만들 수 있다.

가장 기본적인 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 조건식]]

조건을 갖는 List comprehension

뒤에 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 에서도 가능하다.

Dictionary comprehension

예시를 바로 살펴 보자. 리스트 내의 튜플을 딕셔너리로 만들 것이다.

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 comprehension

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문의 복잡한 리스트 컴프리헨션 한줄로 코딩하는 것보다 나을 수 있다.

0개의 댓글