Python

[Python] List comprehension(리스트 컴프리헨션)

wonhwa 2021. 9. 27. 16:36
반응형
List Comprehension이란?

List Comprehension(리스트 컴프리헨션)은

리스트를 한 줄의 코딩으로 빠르게, 효율적으로 만들 수 있는 파이썬 문법이다.

 

예를 들어 1~10까지의 정수를 가지는 리스트를 만들어  보고자 한다.

물론 list = [1,2,3,4,5,6,7,8,9,10] 이렇게 표현을 해도 되지만 더 큰 숫자를 쓸 때를 대비하여 

아래와 같이 표현해 보도록 하겠다.

#배열의 사이즈를 지정하는 변수 생성
arr_num = 10
#변수 arr_num의 갯수만큼 배열을 생성하는 리스트 생성
arr = [0]*arr_num
#생성된 arr 확인
print(arr)

- 중간 결괏값: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

#배열의 사이즈를 지정하는 변수 생성
arr_num = 10
#변수 arr_num의 갯수만큼 배열을 생성하는 리스트 생성
arr = [0]*arr_num
#생성된 arr 확인
print(arr)
print("-------------------------------")
#1~10의 배열을 가지는 arr값으로 변환하기
for i in range(arr_num):
    arr[i] = i+1
arr

- 최종 결괏값: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

이렇게 1~10까지 값을 차례로 가지는 리스트를 만드는 것에도 3줄 이상의 코드가 작성이 된다.

이때 List comprehension을 사용하면 리스트 만드는 줄의 코드를 1줄로 줄일 수 있다.

List comprehension의 기본 규칙: [(변수에 적용할 수식) for (변수) in (for문이 돌아가는 범위)]
#배열의 사이즈를 지정하는 변수 arr_num 생성
arr_num = 10

"""
list comprehension을 사용하여
변수 arr_num의 갯수만큼 배열을 생성하는 리스트 생성
"""

arr = [i+1 for i in range(arr_num)]
arr

-결괏값: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

위와 같이 List comprehension을 쓰면

arr = [i+1 for i in range(arr_num)] 이 한 줄의 코드만으로 리스트 생성이 가능하다.

 

조건문을 사용하여 arr 만들기

List comprehension을 사용할 때 조건문(if)을 추가하여 리스트 생성이 가능하다.

예를 들어 1~30의 범위 안에서 홀수의 배열을 가지는 list를 만들어 보자.

조건문 arr : [(변수에 적용할 수식) for (변수) in (for문이 돌아가는 범위) if (조건문)]
# 1~30 중에 홀수(2로 나눴을 때 나머지가 1인 수) arr만들기
arr = [i for i in range(1,30) if i % 2 == 1]
arr

-결괏값: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29]

 

AND , OR 조건 추가하기

마찬가지로 List Comprehension의 AND, OR 조건을 추가하여 List 생성이 가능하다.

AND 조건: [(변수에 적용할 수식) for (변수) in (for문이 돌아가는 범위) if (조건문) if (조건문)]
OR 조건: [(변수에 적용할 수식) for (변수) in (for문이 돌아가는 범위) if (조건문) or (조건문)]

예제로 각각 1~30 중 홀수의 배열이고 3의 배수인 배열,

1~30 중 3의 배수 또는 2로 나눴을 때 몫이 3인 배열을 생성해보자.

#AND 조건
arr = [i for i in range(1,30) if i%2 == 1 if i%3 == 0]
print(arr)

#OR 조건
arr = [i for i in range(1,30) if i%3 == 0 or i//2 == 3]
arr

-결괏값: [3, 9, 15, 21, 27]

           [3, 6, 7, 9, 12, 15, 18, 21, 24, 27]

 

다차원 매트릭스 리스트 만들기 

list comprehension으로 리스트 안의 리스트를 만들 수 있다.

예시로 1,2,3의 값을 한 행으로 갖는 2차원의 매트릭스 행렬 (3x3) 리스트를 만들어 보도록 하자.

MATRIX : [[(변수에 적용할 수식) for (컬럼 변수) in (for문이 돌아가는 범위)] for (행 변수) in (for문의 범위)]
#3x3 행렬을 가지는 2차원 리스트 만들기
matrix = [[i+1 for i in range(3)] for n in range(3)]
matrix

-결괏값: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

 

위의 리스트를 다시 1차원 리스트로 바꿀 수도 있다.

#2차원 행렬(matrix)을 1차원 리스트로 변환하기
row = [r for i in matrix for r in i] #첫번째 for문은 행, 두 번째 for문은 행안의 열을 다룬다.
row

-결괏값: [1, 2, 3, 1, 2, 3, 1, 2, 3]

 

예제파일

List_comprehension_ex.ipynb
0.01MB

 

참고자료

1. list comprehension에 대한 즐거운 이해

2. 파이썬을 활용한 회계프로그래밍-List comprehension

3. 예제로 배우는 파이썬 프로그래밍-Python comprehension


마무리

오늘은 list comprehension에 대해 다루어 보았다.

list 자료구조뿐만이 아니라 dict, tuple 등의 다른 comprehension도 있으니 참고자료를 확인하길 바란다.

이번 list comprehension을 잘 이해하였다면 다음 강좌인 lambda는 수월히 익힐 수 있을 것이다.

반응형