TIL - Wecode | Python - List Comprehension

한성봉·2021년 5월 19일
0

List Comprehension

List Comprehension 은 새로운 리스트를 만들 때 사용할 수 있는 간단한 표현식이다.
리스트와 마찬가지로 대괄호[]를 사용한다.
우리가 만들려는 원소를 표현하는 표현식을 시작으로 for loop가 뒤에 따라오는 형식이다. 조건에 따라 뒤에 if문도 추가할 수 있다.

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

예시를 한번 살펴보겠습니다.
만약 1~10까지 리스트로 나타내는 코드를 작성해보겠습니다.

new_list = []
for x in range(1, 11):
    new_list.append(x)

print(new_list)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

일반적인 반복문 형태를 list comprehension 형태로 바꿔보겠습니다.

new_list = [ x for x in range(1, 11) ]
print(new_list)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

같은 결과가 출력된다. 4줄의 코드를 단 2줄로 줄였다. 적재적소에 활용하면 유용한 표현식이 되겠다.

for문list comprehension 상호간에 변환이 가능하다.
리스트 컴프리헨션으로 작성한 코드는 간결하고 데이터베이스를 조회하여 리스트로 만들 때 많이 사용되므로 리스트 컴프리 헨션은 새로운 배열을 만들때 특히 유용합니다.
짧은 코드이기 때문에 성능면에 더 유리할 수 밖에 없다.

하지만 list comprehension 가 항상 유용한 것은 아니다.
코드의 가독성을 위해 반복문과 조건문의 중첩될 때 여러줄로 나타내는 것이 가독성이 좋을 것이다.


Assignment

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

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

# 일반 코드
def city(cities):
    no_s_city = []
    result = []
    for i in cities:
        result = i
        if result[0] == "S":
            pass
        else:
            no_s_city.append(result)

    return no_s_city


print(city(cities))
# ['Tokyo', 'Jakarta', 'Guangzhou', 'Beijing', 'Karachi', 'Delhi']

더 짧은 코드로 작성할 수도 있겠으나 나는 이렇게 작성하여 풀었다. 어쨌든 이것을 list comprehension으로 간결하게 나타내보자.

list_comprehension = [i for i in cities if i[0] != 'S']

print(list_comprehension)
# ['Tokyo', 'Jakarta', 'Guangzhou', 'Beijing', 'Karachi', 'Delhi']

정말 간결하다.

list comprehension을 보니 위에 작성했던 코드보다 훨씬 간결하게 작성할 수 있겠다는 생각이 들었다.

list_comprehension = []
for i in cities:
    if i[0] != 'S':
        list_comprehension.append(i)
    else:
        pass

print(list_comprehension)
# ['Tokyo', 'Jakarta', 'Guangzhou', 'Beijing', 'Karachi', 'Delhi']

왜 그렇게 힘들게 함수를 작성했나 생각이 들었다. 하지만 자책하지 않았다. 문제해결을 하려는 생각을 하였고 했다는 생각이 중요한 것 같다.

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

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


list_com = {x: y for x, y in population_of_city}

print(list_com)
#{'Tokyo': 36923000, 'Shanghai': 34000000, 'Jakarta': 30000000, 'Seoul': 25514000, 'Guangzhou': 25000000, 'Beijing': 24900000, 'Karachi': 24300000, 'Shenzhen': 23300000, 'Delhi': 21753486}

0개의 댓글