Python | 리스트 컴프리헨션 list comprehension

Sua·2020년 12월 23일
0

Python

목록 보기
11/28
post-thumbnail

리스트 컴프리헨션이란?

리스트 안에 식, for 반복문, if 조건문 등을 지정하여 리스트를 생성하는 것을 리스트 컴프리헨션(list comprehension)이라고 한다.

리스트 컴프리헨션 사용하기

  • 리스트 컴프리헨션은 새 리스트를 생성할 뿐, 원본 리스트는 수정하지 않는다. 원본 리스트를 변경하고 싶다면 원본 리스트를 대입해두었던 변수에 새 리스트를 대입하면 된다.

  • [표현식 for 변수 in 반복가능한 객체]

>>> a = [i for i in range(10)]        # 0부터 9까지 숫자를 생성하여 리스트 생성
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

식 부분에서 i를 다른 값과 연산하면 각 연산의 결과를 리스트로 생성한다.

>>> c = [i + 5 for i in range(10)]    # 0부터 9까지 숫자를 생성하면서 값에 5를 더하여 리스트 생성
>>> c
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

리스트 컴프리헨션에서 if 조건문 사용하기

  • [표현식 for 변수 in 반복가능한 객체 if 문]
>>> a = [i for i in range(10) if i % 2 == 0]    # 0~9 숫자 중 2의 배수인 숫자(짝수)로 리스트 생성
>>> a
[0, 2, 4, 6, 8]

for 반복문과 if 조건문을 여러 번 사용하기

# 2단부터 9단까지 구구단 리스트를 생성

>>> a = [i * j for j in range(2, 10) for i in range(1, 10)]
>>> a
[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]

가독성을 위해 들여쓰기를 해주는 것이 좋다.

a = [i * j for j in range(2, 10)
           for i in range(1, 10)]

리스트 컴프리헨션의 장단점

장점

  • 간결하다.
  • 새로운 배열을 만들 때 유용하다.
  • for문보다 성능이 더 좋다. (실행속도가 빠르다.)

단점

  • 너무 복잡하게 작성할 경우 가독성이 떨어진다. 여러 줄의 표현식과 조건문으로 표현하는 게 나을 때도 있다.

리스트 컴프리헨션 활용하기

  1. 다음과 같은 도시목록의 리스트가 주어졌을때, 도시이름이 S로 시작하지 않는 도시만 리스트로 만들 때 리스트 컴프리헨션을 사용하여 함수를 작성해 보세요.
cities = ["Tokyo", "Shanghai", "Jakarta", "Seoul", "Guangzhou", "Beijing", "Karachi", "Shenzhen", "Delhi"]

def not_S_cities(cities):
    return [x for x in cities if x[0] != "S"]

print(not_S_cities(cities))
['Tokyo', 'Jakarta', 'Guangzhou', 'Beijing', 'Karachi', 'Delhi']
  1. 다음과 같은 도시, 인구수가 튜플의 리스트로 주어졌을때, 키가 도시, 값이 인구수인 딕셔너리를 딕셔너리 컴프리헨션을 사용한 함수를 작성해 보세요.
population_of_city = [('Tokyo', 36923000), ('Shanghai', 34000000), ('Jakarta', 30000000), ('Seoul', 25514000),\
     ('Guangzhou', 25000000), ('Beijing', 24900000), ('Karachi', 24300000), ('Shenzhen', 23300000), ('Delhi', 21753486)]

def dict_population_of_city(population_of_city):
    return {x:y for x, y in population_of_city}

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

본 포스팅은 아래의 사이트를 참고하여 작성되었습니다.
연오의 파이썬 https://python.bakyeono.net/chapter-6.html
코딩도장 https://dojang.io/
https://wikidocs.net/92540

profile
Leave your comfort zone

0개의 댓글