Python 공부하기 7 - list comprehensions

김우식·2022년 5월 30일
0

list comprehensions이란?

리스트 컴프리헨션이란 새로운 리스트를 만들 때 사용할 수 있는 간단한 표현식으로 리스트와 마찬가지로 대괄호 [, ] 를 사용하여 작성합니다.

우리가 만들려고 하는 원소를 표현하는 표현식으로 시작하여 for 루프가 뒤에 따라오는 형식을 가집니다. For 문 뒤에 if문을 추가하여 조건문을 포함한 형식도 올 수 있습니다.

리스트 컴프리헨션으로 작성한 코드는 간결하고 데이터베이스를 조회하여 리스트로 만들 때 많이 사용되므로 리스트 컴프리 헨션은 새로운 배열을 만들때 특히 유용합니다.

또한 성능개선을 하기 위해서 리스트 컴프리헨션을 사용하기도 하지만 모든 상황에서 리스트 컴프리헨션이 만능은 아닙니다. 예를 들어 코드의 가독성을 위해서는 여러 줄의 표현식과 조건문으로 표현하는 것이 이중 for문의 복잡한 리스트 컴프리헨션 한줄로 코딩하는 것보다 나은 경우도 있습니다.

ex) 
[ 표현식 for 원소 in 반복 가능한 객체 ]
[ 표현식 for 원소 in 반복 가능한 객체 if]

ex2)
리스트 컴프리헨션 형식으로 1부터 10까지를 가지는 리스트를 만들어보기
new_list = [ x for x in range(1, 11) ]
print(new_list)

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

cities = ["Tokyo", "Shanghai", "Jakarta", "Seoul", "Guangzhou", "Beijing", "Karachi", "Shenzhen", "Delhi" ]
#주어진 도시목록 list

new_list = [ x for x in cities if x[0] != 'S' ]
#list comprehensions을 이용해 list인 cities의 요소들의 1번째 자리가 'S'인지 비교한다.

print(new_list)
#출력

list comprehensions을 이용한 반복문과 조건문으로 리스트를 만들어 보는 예제였다.

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

population_of_city = [('Tokyo', 36923000), ('Shanghai', 34000000), ('Jakarta', 30000000), ('Seoul', 25514000), ('Guangzhou', 25000000), ('Beijing', 24900000), ('Karachi', 24300000), ('Shenzhen', 23300000), ('Delhi', 21753486) ]
# 주어진 튜플(도시, 넘버) 리스트

cities_list = (population_of_city[x][0] for x in range(0, len(population_of_city)))
# population_of_city의 1번째 요소의 길이 만큼을 받아 리스트를 만든다.

number_list = (population_of_city[x][1] for x in range(0, len(population_of_city)))
# population_of_city의 2번째 요소의 길이 만큼을 받아 리스트를 만든다.

dic = dict(zip(cities_list, number_list))
# zip을 이용해 두 리스트를 하나의 딕셔너리 형태로 만들어 준다.

print(dic)
#출력

가장 첫 번째로 주어진 리스트를 도시와 값으로 각각 다른 리스트로 분리해 주어야 했다.

list comprehensions를 이용한 코드로 도시의 리스트인 cities_list와 값의 리스트인 number_list, 두 개의 리스트를 만들어 분리했다.

여기서 문제였던것이 두 개의 리스트를 하나의 딕셔너리로 만드는법을 몰라 막혀 있었는데, 구글링을 통해서 문제를 해결 할 수 있었다.

[python] List to Dict (리스트를 딕셔너리로 변환) 총 정리!!
https://security-nanglam.tistory.com/427

zip 사용하여 묶기

예제 코드
string_list = ['A','B','C']
int_list = [1, 2, 3]
dictionary = dict(zip(string_list, int_list))
#string_list 와 int_list의 순서를 바꾸면 key와 value도 변경된다.
print(dictionary)
출력
{'A': 1, 'B': 2, 'C': 3}

zip을 이용해 두 리스트를 하나의 딕셔너리로 묶어준 뒤, 출력해 보았다.

dic = dict(zip(cities_list, number_list))
# zip을 이용해 두 리스트를 하나의 딕셔너리 형태로 만들어 준다.

print(dic)
#출력

정상적으로 잘 실행된다!

profile
반가워요!

0개의 댓글