[Python] List comprehension(리스트 컴프리헨션)
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]
예제파일
참고자료
1. list comprehension에 대한 즐거운 이해
2. 파이썬을 활용한 회계프로그래밍-List comprehension
3. 예제로 배우는 파이썬 프로그래밍-Python comprehension
마무리
오늘은 list comprehension에 대해 다루어 보았다.
list 자료구조뿐만이 아니라 dict, tuple 등의 다른 comprehension도 있으니 참고자료를 확인하길 바란다.
이번 list comprehension을 잘 이해하였다면 다음 강좌인 lambda는 수월히 익힐 수 있을 것이다.