본문 바로가기
Python 코딩도장

파이썬 코딩도장 Unit 22 정리(4) - 리스트 표현식 사용

by chanfficial 2022. 1. 21.

5. 리스트 표현식 사용하기

  • 파이썬은 리스트 안에 for 반복문과 if 조건문을 사용할 수 있다는 특이점을 가지고 있다.
  • 이렇게 리스트 안에 식, for 반복문, if 조건문 등을 지정하여 리스트를 생성하는 것을 리스트 컴프리헨션(list comprehension)이라고 한다.(여기서는 리스트 표현식이라고 칭하겠음)
  • 리스트 표현식 : 식으로 지정해서 생성된 것을 리스트로 잡아두는 것이다.
  • 리스트 표현식은 다음과 같이 리스트 안에 식, for 반복문을 지정하는데, 여러 줄의 코드를 한 줄로 줄일 수 있다는 장점이 있다.
    # [식 for 변수 in 리스트]
    # list(식 for 변수 in 리스트)
    >>> a = [i for i in range(10)]        # 0부터 9까지 숫자를 생성하여 리스트 생성
    >>> a
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> b = list(i for i in range(10))    # 0부터 9까지 숫자를 생성하여 리스트 생성
    >>> b
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]​
    - 뒤에서 앞으로 읽는 것이 간단하다. → range(10)으로 0부터 9까지 생성하여 변수 i에 숫자를 꺼내고, 최종적으로 i를 이용하여 리스트를 만든다는 의미
  • [i for i in range(10)]는 변수 i를 그대로 사용하지만 다음과 같이 식 부분에서 i를 다른 값과 연산하면 각 연산의 결과를 리스트로 생성한다.
    >>> c = [i + 5 for i in range(10)] # 0부터 9까지 숫자를 생성하면서 값에 5를 더하여 리스트 생성
    >>> c
    [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
    >>> d = [i * 2 for i in range(10)] # 0부터 9까지 숫자를 생성하면서 값에 2를 곱하여 리스트 생성
    >>> d
    [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]​

※ 리스트 표현식은 list(식 for 변수 in 리스트)처럼 list로 만들 수도 있지만 파이썬에서는 대괄호 방식을 사용하는 것이 좋다.

 

 

5-1. 리스트 표현식에서 if 조건문 사용하기

  • 리스트 표현식에서 if 조건문은 for 반복문 뒤에 지정한다.
  • 아래와 같이 for 반복문 뒤에 if 조건문을 지정하면, 숫자를 생성한 뒤 if 조건문에서 특정 숫자만 뽑아내 리스트를 생성한다.
    # [식 for 변수 in 리스트 if 조건식]
    # list(식 for 변수 in 리스트 if 조건식)
    >>> a = [i for i in range(10) if i % 2 == 0] # 0~9 숫자 중 2의 배수인 숫자(짝수)로 리스트 생성
    >>> a
    [0, 2, 4, 6, 8]​
  • 또는 i 를 다른 값과 연산하여 리스트를 만들어도 된다.
    >>> b = [i + 5 for i in range(10) if i % 2 == 1] # 0~9 숫자 중 홀수에 5를 더하여 리스트 생성
    >>> b
    [6, 8, 10, 12, 14]​

5-2. for 반복문과 if 조건문 여러 번 사용하기

  • 리스트 표현식은 for과 if를 여러 번 사용할 수 있다.
    [식 for 변수1 in 리스트1 if 조건식1     for 변수2 in 리스트2 if 조건식2     
       ...     for 변수n in 리스트n if 조건식n]
     
    list(식 for 변수1 in 리스트1 if 조건식1         for 변수2 in 리스트2 if 조건식2         
       ...         for 변수n in 리스트n if 조건식n)​
  • 다음은 for과 if를 여러 번 사용하여 구구단 리스트를 생성한 것이다.
    >>> a = [i * j for j in range(2, 10) for i in range(1, 10)] # 2부터 9까지 1~9의 숫자를 곱함
    >>> 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가 여러 개이면 뒤에서 앞으로 처리한다.