<개인공부>/[Python]

[Python] 파이썬 리스트 컴프리헨션 vs for문

BlockDMask 2025. 3. 29. 08:11
반응형

안녕하세요. BlockDMask 입니다.

오늘은 파이썬에서 리스트를 만들 때 자주 사용되는 리스트 컴프리헨션(List Comprehension)
기존의 for문 방식의 차이점에 대해 알아보겠습니다.

속도, 코드 길이, 가독성 면에서 어떤 차이가 있는지 비교하면서 실전 예제도 함께 살펴보겠습니다.



1. 리스트 컴프리헨션이란?

리스트 컴프리헨션은 기존의 for문을 한 줄로 간단하게 표현하는 방식입니다.
코드를 더 짧고 간결하게 만들 수 있고, 파이썬답게 코딩할 수 있게 도와줍니다.

기본 문법:

[표현식 for 변수 in 반복가능한객체]

예를 들어 1부터 5까지의 제곱을 담은 리스트를 만들고 싶을 때,

 

일반 for문 방식:

squares = []
for i in range(1, 6):
    squares.append(i ** 2)
print(squares)

리스트 컴프리헨션 방식:

squares = [i ** 2 for i in range(1, 6)]
print(squares)

결과: [1, 4, 9, 16, 25]



2. 조건문이 들어간 리스트 컴프리헨션

리스트 컴프리헨션에 조건을 넣어서 필터링할 수도 있습니다.

evens = [i for i in range(1, 11) if i % 2 == 0]
print(evens)  # [2, 4, 6, 8, 10]

for문으로 표현하면:

evens = []
for i in range(1, 11):
    if i % 2 == 0:
        evens.append(i)



3. 리스트 컴프리헨션의 장점

  • 코드가 간결함 – 반복문 + 조건문 + 리스트 추가가 한 줄에 끝남
  • 성능이 더 좋음 – append()를 반복 호출하는 것보다 빠른 경우도 있음
  • 가독성 향상 – 한눈에 목적이 드러남



4. 리스트 컴프리헨션 vs for문 속도 비교

time 모듈을 이용해 두 방식의 성능 차이를 비교해보겠습니다.
1부터 100만까지 제곱 리스트를 생성하는 시간 측정 예제입니다.

import time

# 리스트 컴프리헨션
start = time.time()
squares = [i ** 2 for i in range(1, 1000001)]
end = time.time()
print("컴프리헨션:", end - start)

# 일반 for문
start = time.time()
squares2 = []
for i in range(1, 1000001):
    squares2.append(i ** 2)
end = time.time()
print("for문:", end - start)

예시 출력 (결과는 PC 성능에 따라 다름):

컴프리헨션: 0.088  
for문: 0.146

결론: 리스트 컴프리헨션이 더 빠르고 효율적입니다.



5. 중첩 반복문도 가능할까?

가능합니다. 아래는 1~3과 A~C의 조합을 구하는 예제입니다.

pairs = [(i, j) for i in range(1, 4) for j in ['A', 'B', 'C']]
print(pairs)

결과: [(1, 'A'), (1, 'B'), (1, 'C'), (2, 'A'), (2, 'B'), (2, 'C'), (3, 'A'), (3, 'B'), (3, 'C')]



6. 리스트 컴프리헨션을 쓰면 안 되는 경우?

너무 복잡하고 조건이 많을 경우엔 오히려 가독성이 떨어집니다.
그럴 땐 일반 for문이 더 명확합니다.

# 가독성이 떨어짐
result = [x for x in range(100) if x % 2 == 0 if x % 3 == 0 if x % 5 == 0]



7. 결론

  • 리스트 컴프리헨션은 반복문을 간결하게 표현할 수 있는 파이썬스러운 문법입니다.
  • 조건 필터링, 중첩 반복문도 표현 가능하며 코드가 훨씬 짧아집니다.
  • 복잡한 로직에는 오히려 for문이 더 가독성이 좋을 수 있습니다.



이상, 파이썬 리스트 컴프리헨션 vs for문 차이점과 사용법에 대해서 적어보았습니다.
오늘도 읽어주셔서 감사합니다.

반응형