Python
Python 리스트 컴프리헨션(List Comprehension)
189bigman
2023. 1. 4. 23:58
리스트 컴프리헨션(List Comprehension)이란?
'리스트 컴프리헨션은 리스트를 만드는 간결한 방법을 제공합니다. 흔한 용도는, 각 요소가 다른 시퀀스나 이터러블의 멤버들에 어떤 연산을 적용한 결과인 리스트를 만들거나, 어떤 조건을 만족하는 요소들로 구성된 서브 시퀀스를 만드는 것'
라고 공식문서에 나옵니다다. 쉽게 이야기 하자면 루프에서 어떤 조건을 만족하는 리스트를 간결하게 만드는 방법 입니다.
예시
그럼 일반적인 for loop에서 리스트를 만드는 방법과 리스트 컴프리헨션의 예시를 보겠습니다.
num_list =[]
for i in range(1,11):
num_list.append(i)
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# -------------------------------------
#[표현식(변수명이 포함되어 있음) for 변수명 in 리스트]
compre_num_list = [i for i in range(1,11)]
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
일단 코드의 생김새와 길이만 봐도 확연한 차이가 보입니다.
상단 코드는 루프속에서 append 함수를 사용해 리스트에 추가하고 있고 하단 코드는 리스트 컴프리헨션을 사용해 1줄로 작성했습니다.
리스트 컴프리헨션은 간결한 코드작성을 위해 사용해도 좋지만 리스트를 만들때 더 좋은 효율을 가집니다.
효율예시
import time
start = time.time()
num_list =[]
for i in range(1,100001):
num_list.append(i)
end = time.time()
print('loop',f"{end - start:.5f} sec")
# -------------------------------------
start1 = time.time()
compre_num_list = [i for i in range(1,100001)]
end1 = time.time()
print('compre',f"{end1 - start1:.5f} sec")
#loop 0.00737 sec
#compre 0.00204 sec
차이는 0.00533 초.
간단한 코드라 시간 차이는 얼마 안나지만 효율은 3배정도의 차이를 보여줍니다.
더 복잡한 계산의 코드였다면 시간차이는 더 많이 났을겁니다.
리스트 컴프리헨션은 조건문과 함께 쓰일수 있습니다.
조건문 예시
odd_number_list =[]
for i in range(1,100001):
if i%2 == 1:
odd_number_list.append(i)
# -------------------------------------
#[표현식(변수명이 포함되어 있음) for 변수명 in 리스트 if 조건문]
compre_odd_num_list = [i for i in range(1,100001) if i % 2 == 1]
# loop 0.01060 sec
# compre 0.00469 sec
홀수인경우의 조건문을 추가했습니다
일반적인 리스트를 만드는 방법은 코드가 점점 깊어집니다.
반면 리스트 컴프리헨션 작성은 아직도 한줄로 간단하게 작성할 수 있고 효율도 약 2배 차이를 보여줍니다.
else예시
#[(if) if 조건문 else (else) for 변수명 in 리스트]
compre_if_else_odd_num_list = [i if i % 2 == 1 else '짝수' for i in range(1, 11)]
#[1, '짝수', 3, '짝수', 5, '짝수', 7, '짝수', 9, '짝수']