List Comprehension

폐쇄맨·2020년 7월 23일
0

WeCode

목록 보기
6/22

컴프리헨션

과제도 과제지만 컴프리헨션에 대해 간단히 알아보고 간다. 구글 파이썬 스타일가이드에 너무 잘 정리되어 있다.

정의

리스트, 딕셔너리, 세트 컴프리헨션은 전통적인 루프, map(), filter() 람다 등을 사용하지 않고도 컨테이너 타입과 이터레이터를 생성하는 간결하고 효율적인 방법이다.

장점

보통의 방법으로 리스트, 딕셔너리, 세트를 생성하는 것 보다 컴프리헨션이 더 깔끔하고 간단하다.

단점

조금만 복잡해지면 읽기 어렵다.

결론

간단한 경우에는 사용해도 된다. 매핑 표현, for문, 필터 표현을 모두 한 줄에 작성하는 것이 간단한 경우에 해당한다. 더 복잡해질 것 같으면 보통의 루프를 사용하는 것이 좋다.

아래는 파이썬 코딩도장에서 가져온 처리 순서이다. 가장 복잡한 예제로 가져왔다.

Assignment 1

사전스터디때 파이썬 코딩도장에서 컴프리헨션에 대해서 공부한 적이 있다. 그래서 수월하게 풀었다 😎.

문제

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

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

답안

크게 설명할 내용은 없는 것 같다.

def no_cities_begins_with_S(cities):
   return [city for city in cities if not str.startswith(city, 'S')]

print(no_cities_begins_with_S(cities))

>>> python assignment1.py
['Tokyo', 'Jakarta', 'Guangzhou', 'Beijing', 'Karachi', 'Delhi']

Assignment 2

질문

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

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

답안

def convert_list_of_tuples_into_dict(list_of_tuples):
    return {t[0]: t[1] for t in list_of_tuples}

print(convert_list_of_tuples_into_dict(population_of_city))

>>> python assignment2.py
{'Tokyo': 35923000, 'Shanghai': 34000000, 'Jakarta': 30000000, 'Seoul': 25514000, 'Guangzhou': 25000000, 'Beijing': 24900000, 'Karachi': 24300000, 'Shenzhen': 23300000, 'Delhi': 21753486}
profile
폐쇄맨

0개의 댓글