리스트 컴프리헨션(List Comprehension)은
기존의 반복문을 통해 리스트를 생성하는 과정을
단 한 줄의 코드로 간결하게 구현할 수 있는 방법입니다.
이 방법을 통해 코드의 가독성과 효율성을 높일 수 있습니다.
간단한 사용 예시 코드
for문을 통해 1부터 5까지의 숫자를 리스트에 넣는 방법입니다.
numbers = []
for i in range(1,6):
numbers.append(i)
다음은 리스트 컴프리헨션(List Comprehension)을 사용한 방법입니다.
numbers = [ x for x in range(1, 6) ]
세 줄의 코드가 한 줄로 줄어들었습니다.
결과는 두 코드 모두 동일합니다.
기본 문법 구조
리스트 컴프리헨션의 기본 구조는 다음과 같습니다.
[ 표현식 for 아이템 in 반복가능 객체 ]
이 구조는 반복 가능한 객체에서 항목을 하나씩 가져와서
각 항목에 대해 표현식을 적용하여 새로운 리스트를 생성합니다.
리스트 컴프리헨션은 반복문을 수행해서 리스트에 추가하는 기존의 방법에 비해
코드가 간결하기 때문에,
더 직관적이고 간단하게 코드를 작성할 수 있게 해 줍니다.
리스트 컴프리헨션의 다양한 예시 코드
0부터 9까지 숫자를 생성하여 리스트를 만드는 코드
a = [ i for i in range(10)]
print(a)
0부터 9까지 숫자에 2를 곱한 값을 생성하여 리스트를 만드는 코드
a = [ i*2 for i in range(10)]
print(a)
0부터 9까지의 숫자 중 짝수를 값으로 갖는 리스트를 만드는 코드
a = [ i for i in range(10) if i % 2 == 0]
print(a)
위 코드에서 확인할 수 있듯이
리스트 컴프리헨션은 표현식 다음에 온 구문을 모두 실행한 다음
마지막에 표현식이 실행되는 것을 알 수 있습니다.
for문을 중첩하여 사용할 수도 있습니다.
아래 코드는 구구단의 결과 값을 리스트로 생성하는 코드입니다.
a= [ i*j for i in range(2, 10) for j in range(1, 10)]
print(a)
위 코드를 리스트 컴프리헨션을 사용하지 않고 작성하면 아래와 같습니다.
a = []
for i in range(2, 10):
for j in range(1, 10):
a.append(i * j)
print(a)
반환값만 있다면 표현식에 함수가 들어갈 수도 있습니다.
아래 코드는 x의 x승을 반환하여 리스트를 생성하는 코드입니다.
def number_return(x):
return x**x
a = [ number_return(i) for i in range(10)]
print(a)
참고로 위 코드의 출력값은 다음과 같습니다.
[1, 1, 4, 27, 256, 3125, 46656, 823543, 16777216, 387420489]
0의 0승을 계산한 값이 1로 출력이 되었는데,
파이썬에서는 0의 0승을 1로 간주합니다.
for 문과 리스트 컴프리헨션의 속도 비교
다음은 for 문을 사용하여 실행 시간을 측정한 코드입니다.
import time
for i in range(10):
start_time = time.time()
for_list = []
for x in range(10000000):
for_list.append(x**2)
end_time = time.time()
print(f"for문 사용 : {end_time - start_time:.5f} 초")
결과는 다음과 같습니다.
for문 사용 : 0.52413 초
for문 사용 : 0.60548 초
for문 사용 : 0.59033 초
for문 사용 : 0.61162 초
for문 사용 : 0.59093 초
for문 사용 : 0.59079 초
for문 사용 : 0.58413 초
for문 사용 : 0.59773 초
for문 사용 : 0.59066 초
for문 사용 : 0.59269 초
다음은 리스트 컴프리헨션을 사용하여 실행시간을 측정한 코드입니다.
import time
for i in range(10):
start_time = time.time()
list_comp = [x**2 for x in range(10000000)]
end_time = time.time()
print(f"리스트 컴프리헨션 사용: {end_time - start_time:.5f} 초")
결과는 다음과 같습니다.
리스트 컴프리헨션 사용: 0.37692 초
리스트 컴프리헨션 사용: 0.43792 초
리스트 컴프리헨션 사용: 0.43103 초
리스트 컴프리헨션 사용: 0.43805 초
리스트 컴프리헨션 사용: 0.43087 초
리스트 컴프리헨션 사용: 0.43784 초
리스트 컴프리헨션 사용: 0.43113 초
리스트 컴프리헨션 사용: 0.43787 초
리스트 컴프리헨션 사용: 0.43099 초
리스트 컴프리헨션 사용: 0.43765 초
대충 계산해도 효율이 25프로 정도는 더 좋아진 것으로 보입니다.
속도는 컴퓨터 환경이나,
계산의 복잡성 또는 작업의 성격에 따라 달라질 수 있습니다.
여기를 방문하시면 더 많은 파이썬 관련 자료를 확인할 수 있습니다.
'파이썬(Python)' 카테고리의 다른 글
[ Customtkinter ] pack() 메서드 가이드, 간단한 위젯 배치(Tkinter pack()) (2) | 2024.11.15 |
---|---|
[ 자작 프로그램 ] 엑셀 파일의 시트 합치기 프로그램 (3) | 2024.11.14 |
[ CustomTkinter ] Customtkinter 메뉴 만들기 (0) | 2024.11.13 |
[ PANDAS ] 판다스(PANDAS) read_excel() 함수 총괄 정리 (0) | 2024.11.12 |
[ Tkinter, ttk, CustomTkinter ] 각 라이브러리 위젯 비교 및 지원 여부 (1) | 2024.11.10 |