파이썬(Python)

[ Basic ] 파이썬 리스트 컴프리헨션(List Comprehension) 이해하기

카루루1007 2024. 11. 16. 11:18
728x90
반응형

리스트 컴프리헨션(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 초

 

728x90

대충 계산해도 효율이 25프로 정도는 더 좋아진 것으로 보입니다.

속도는 컴퓨터 환경이나,

계산의 복잡성 또는 작업의 성격에 따라 달라질 수 있습니다.

여기를 방문하시면 더 많은 파이썬 관련 자료를 확인할 수 있습니다.

파이썬 공부하기

728x90
반응형