본문 바로가기
Python

[Python] List Comprehensions

by 혀넝 2022. 3. 6.

리스트 컴프리헨션이란 새로운 리스트를 만들 때 사용되는 간단한 표현식으로 []를 사용한다.
기본적인 작성법은 아래와 같다.

list_name1 = [표현식 for 원소 in 반복 가능한 객체]
list_name2 = [표현식 for 원소 in 반복 가능한 객체 if문]

우리가 만들고자 하는 표현을 표현식에 넣고, for문을 통해 새로운 리스트를 만든다. for문 뒤에 if문을 사용하여 조건을 만족하는 원소에 대해서 새로운 리스트를 만들 수 있다.

 

1. for문을 사용한 예시

예시 1

numbers = [num for num in range(1, 10)]
print(numbers)

>>> [1, 2, 3, 4, 5, 6, 7, 8, 9]

위 예시는 1부터 10 사이에 있는 숫자들을 리스트에 담고 있다.

예시 2

numbers = [num * 2 for num in range(1, 10)]
print(numbers)

>>> [2, 4, 6, 8, 10, 12, 14, 16, 18]

예시 1과 같은 예시에 표현식만 바꿨다. 1부터 10 사이의 숫자들을 리스트에 추가하는데, 그 숫자들에 2를 곱한 값을 담는다.

 

2. for문과 if문을 같이 사용한 예시

예시 1

heights = [161, 164, 156, 178, 153, 162, 173, 159]
height_list = [height for height in heights if height > 160]
print(height_list)

>>> [161, 164, 178, 162, 173]

heights라고 하는 리스트에 담긴 요소들을 출력하는데, 그 요소가 160 이상일 때만 출력하는 조건식이 붙어있다.

 

예시 2

new_list = [i for i in range(1, 11) if i % 2 == 0]
print(new_list)

>>> [2, 4, 6, 8, 10]

자주 for문과 if문을 사용해서 짝수와 홀수를 표현하곤 하는데, 길게 표현되는 코드를 짧게 한 줄로 표현할 수 있다.

 

3. 리스트 컴프리헨션의 사용

리스트 컴프리헨션은 간결하게 코드를 표현할 수 있어 데이터베이스를 조회하여 리스트를 만들 때 유용하다.
하지만 가독성을 위해서 컴프리헨션을 이용해 한 줄로 표현하는 것보다 여러 줄의 표현식으로 작성하는 것이 나은 경우도 있다.

 

4. 과제

4-1 다음과 같은 도시 목록의 리스트가 주어졌을 때, 도시 이름이 S로 시작하지 않는 도시만 리스트로 만들 때 리스트 컴프리헨션을 사용하여 함수를 작성해 보세요.

cities = ["Tokyo", "Shanghai", "Jakarta", "Seoul", "Guangzhou" "Beijing", 
"Karachi", "Shenzhen", "Delhi"]

list_comprehesion = [city for city in cities if(city[0] != "S")]
print(list_comprehesion)

>>> ['Tokyo', 'Jakarta', 'GuangzhouBeijing', 'Karachi', 'Delhi']

 

4-2 다음과 같은 도시, 인구수가 튜플의 리스트로 주어졌을 때, 키가 도시, 값이 인구수인 딕셔너리를 딕셔너리 컴프리헨션을 사용한 함수를 작성해 보세요.

population_of_city = [('Tokyo', 36923000), ('Shanghai', 34000000), ('Jakarta', 30000000), ('Seoul', 25514000), 
('Guangzhou', 25000000), ('Beijing', 24900000), ('Karachi', 24300000), ('Shenzhen', 23300000), ('Delhi', 21753486) ]

dict = {key:value for key, value in population_of_city}
print(dict)


>>>
{'Tokyo': 36923000, 'Shanghai': 34000000, 'Jakarta': 30000000, 'Seoul': 25514000, 'Guangzhou': 25000000, '
Beijing': 24900000, 'Karachi': 24300000, 'Shenzhen': 23300000, 'Delhi': 21753486}

'Python' 카테고리의 다른 글

[Python] combinations  (0) 2022.06.30
[Python] Iterators  (0) 2022.03.06
[Python] 일급 객체 (first-class citizen)  (0) 2022.03.06
[Python] 한 번에 여러 값 입력 (map 함수 / split 함수)  (0) 2022.02.12