안녕하세요. 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문 차이점과 사용법에 대해서 적어보았습니다.
오늘도 읽어주셔서 감사합니다.
'<개인공부> > [Python]' 카테고리의 다른 글
[Python] 파이썬 클래스 초보자 가이드 (__init__, self) (1) | 2025.04.01 |
---|---|
[Python] 파이썬에서 날짜 다루기 (datetime 기본부터 실전까지) (0) | 2025.03.31 |
[Python] 파이썬 *args와 **kwargs 알아보기 (0) | 2025.03.27 |
[Python] 파이썬에서 파일 경로 다루기 (`os` vs `pathlib`) (0) | 2025.03.25 |
[Python] 파이썬 zip() 함수 활용법 (0) | 2025.03.23 |
[Python] 파이썬 딕셔너리에서 get() vs [] 차이점 (0) | 2025.03.19 |
[Python] 파이썬 with open() 을 써야하는 이유 (0) | 2025.03.08 |
[Python] 파이썬 enumerate() 함수로 인덱스와 값 동시에 가져오기 (0) | 2025.02.17 |