메뉴 닫기

파이썬 리스트 컴프리헨션 완전 정복

파이썬 리스트 컴프리헨션 완전 정복

📌 반복문을 한 줄로 끝내는 리스트 생성 공식

파이썬을 쓰다 보면 반복문으로 리스트를 만들 일이 자주 생기죠.
그럴 때마다 for문을 길게 쓰는 건 지겹기도 하고, 코드를 한눈에 보기 어려운 경우가 많습니다.
이럴 때 딱 필요한 기능이 바로 리스트 컴프리헨션입니다.
복잡한 반복문도 단 한 줄로 표현할 수 있어, 초보자도 쉽게 배울 수 있고 실무에서도 자주 쓰이는 대표적인 파이썬 문법이에요.

이번 글에서는 리스트 컴프리헨션의 기본 구조부터 조건문을 결합한 고급 사용법까지 간단한 예제로 설명드릴게요.
복잡한 리스트 생성 로직도 이 문법만 알면 훨씬 깔끔하게 정리할 수 있습니다.
처음 접하는 분들도 이해할 수 있도록 하나하나 친절하게 설명해드릴게요.



🔗 리스트 컴프리헨션이란?

리스트 컴프리헨션(List Comprehension)은 파이썬에서 리스트를 만들기 위한 간결한 표현식입니다.
기존에는 for문과 append를 조합해서 리스트를 만들었지만, 리스트 컴프리헨션을 사용하면 한 줄로 더 명확하게 리스트를 생성할 수 있죠.

예를 들어, 1부터 5까지의 제곱수를 리스트로 만들고 싶을 때 일반적인 방법은 아래와 같습니다.

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

리스트 컴프리헨션을 사용하면 이렇게 바뀝니다.

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

결과는 동일하지만 코드 길이가 훨씬 짧고 명확하죠.
이런 간결함 덕분에 많은 파이썬 개발자들이 리스트 컴프리헨션을 선호합니다.

💡 TIP: 리스트 컴프리헨션은 튜플, 딕셔너리, 집합에도 응용할 수 있어 활용도가 매우 높습니다.

단순한 리스트 생성부터 조건을 포함한 필터링까지, 리스트 컴프리헨션은 파이썬에서 가장 많이 사용되는 문법 중 하나입니다.
지금부터 그 원리를 하나씩 함께 살펴볼게요.

🧱 기본 구조와 작동 방식

리스트 컴프리헨션은 다음과 같은 구조로 이루어져 있습니다.

CODE BLOCK
[표현식 for 항목 in 반복가능한_객체]

예를 들어 1부터 5까지의 수에 10을 더한 리스트를 만들고 싶다면 아래처럼 작성할 수 있습니다.

CODE BLOCK
result = [i + 10 for i in range(1, 6)]
print(result)  # [11, 12, 13, 14, 15]

이 문법은 마치 반복문과 append를 동시에 실행하는 것처럼 동작합니다.
아래는 내부적으로 어떻게 작동하는지를 일반적인 for문으로 표현한 예시입니다.

CODE BLOCK
result = []
for i in range(1, 6):
    result.append(i + 10)

리스트 컴프리헨션은 이 모든 과정을 한 줄로 처리하기 때문에 가독성작성 속도 모두에서 뛰어난 효과를 발휘합니다.

  • 코드 길이 단축
  • 실행 성능 개선
  • 가독성과 유지보수 향상

이제 리스트 컴프리헨션의 기본 구조를 이해했다면, 다음 단계로 조건문을 함께 적용하는 고급 방식도 금방 익힐 수 있어요.



⚙️ 조건문 결합 방법

리스트 컴프리헨션의 강력한 기능 중 하나는 바로 조건문(if)을 결합할 수 있다는 점입니다.
이 기능을 이용하면 특정 조건을 만족하는 항목만 리스트에 포함시킬 수 있어 훨씬 유용하게 활용할 수 있죠.

예를 들어, 1부터 10까지의 숫자 중 짝수만 리스트로 만들고 싶다면 아래와 같이 작성할 수 있습니다.

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

이 구조는 다음과 같은 일반 for문과 동일한 결과를 만듭니다.

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

조건문이 리스트 컴프리헨션에 포함되면 필터 역할을 하게 되며,
특정 조건을 만족하는 요소만 리스트에 추가됩니다.

💡 TIP: 조건문은 리스트 뒤에 위치해야 하며, 표현식 내부에 조건을 포함하려면 삼항 연산자를 사용할 수 있습니다.

예를 들어, 짝수는 그대로 두고 홀수는 0으로 처리하고 싶다면 이렇게도 쓸 수 있어요.

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

이처럼 리스트 컴프리헨션에 조건을 결합하면 훨씬 더 유연한 데이터 생성이 가능합니다.
이제 복잡한 조건도 깔끔하게 처리해보세요.

📊 중첩 반복문 처리

리스트 컴프리헨션은 단순 반복뿐만 아니라 중첩 반복문(nested loop)도 처리할 수 있습니다.
2차원 배열이나 곱집합 같은 복합 구조를 간결하게 생성할 때 특히 유용하죠.

예를 들어, 두 개의 리스트에서 가능한 모든 조합을 만들고 싶다면 다음과 같이 중첩 리스트 컴프리헨션을 사용할 수 있습니다.

CODE BLOCK
a = [1, 2]
b = ['A', 'B']
pairs = [(x, y) for x in a for y in b]
print(pairs)  # [(1, 'A'), (1, 'B'), (2, 'A'), (2, 'B')]

위 코드는 아래와 같은 이중 for문을 한 줄로 표현한 것입니다.

CODE BLOCK
pairs = []
for x in a:
    for y in b:
        pairs.append((x, y))

이처럼 리스트 컴프리헨션은 반복문이 앞에서부터 순차적으로 중첩되며,
앞쪽 루프가 먼저 실행되고 그 안에서 뒤쪽 루프가 반복됩니다.

💡 TIP: 중첩 리스트 컴프리헨션은 가독성이 떨어질 수 있으므로 너무 복잡한 구조는 피하고, 최대 2단계까지만 사용하는 것이 좋습니다.

또한 2차원 리스트를 1차원으로 펼칠 때도 컴프리헨션이 매우 유용합니다.

CODE BLOCK
matrix = [[1, 2], [3, 4], [5, 6]]
flattened = [num for row in matrix for num in row]
print(flattened)  # [1, 2, 3, 4, 5, 6]

중첩된 구조도 이렇게 간단하게 풀어낼 수 있으니,
리스트 컴프리헨션은 정말 다재다능한 도구라는 걸 느끼실 거예요.



💡 컴프리헨션 vs 일반 for문

리스트 컴프리헨션은 일반 for문보다 짧고 간결한 표현이 가능하다는 장점이 있습니다.
하지만 항상 컴프리헨션이 정답은 아닙니다.
상황에 따라 어떤 방식이 더 적절할지 판단하는 것이 중요해요.

다음은 동일한 기능을 컴프리헨션과 for문 두 방식으로 비교한 예시입니다.

CODE BLOCK
# 리스트 컴프리헨션
squares = [x**2 for x in range(1, 6)]

# 일반 for문
squares = []
for x in range(1, 6):
    squares.append(x**2)

  • 컴프리헨션은 간결하고 빠르며 한눈에 구조를 파악하기 쉬움
  • 🧱for문은 여러 줄로 나뉘어 로직이 복잡하거나 조건이 많을 때 더 유리

따라서 리스트 컴프리헨션은 단순한 리스트 생성에는 매우 적합하지만,
로직이 복잡해지고 조건문이 많아질 경우에는 오히려 가독성이 떨어질 수 있으니 주의해야 합니다.

⚠️ 주의: 지나치게 복잡한 리스트 컴프리헨션은 오히려 코드의 이해를 방해할 수 있습니다. 조건이 많거나 중첩이 깊을 때는 for문을 사용하는 것이 더 나을 수 있습니다.

결론적으로 컴프리헨션과 for문은 각자의 장단점이 있으며,
문맥에 맞게 유연하게 선택하는 것이 가장 좋은 파이썬 코드 작성 습관입니다.

자주 묻는 질문 (FAQ)

리스트 컴프리헨션은 왜 사용하는 건가요?
반복문보다 더 간결하고 명확하게 리스트를 만들 수 있기 때문에 코드의 가독성과 생산성이 모두 향상됩니다.
조건문도 리스트 컴프리헨션에서 쓸 수 있나요?
네, 사용할 수 있습니다. if문을 통해 원하는 조건만 필터링하여 리스트에 담을 수 있어 매우 유용합니다.
중첩된 for문도 리스트 컴프리헨션으로 작성 가능한가요?
가능합니다. 두 개 이상의 반복문도 한 줄로 표현할 수 있으며, 곱집합이나 2차원 리스트 처리에 자주 사용됩니다.
컴프리헨션이 항상 for문보다 좋은가요?
아닙니다. 간단한 경우에는 좋지만, 너무 복잡한 구조는 오히려 가독성을 해칠 수 있어 일반 for문이 더 적절한 경우도 많습니다.
튜플이나 딕셔너리에도 컴프리헨션을 쓸 수 있나요?
네, 리스트뿐 아니라 딕셔너리, 집합(set)에도 컴프리헨션 문법이 존재하며 매우 자주 활용됩니다.
리스트 컴프리헨션을 사용할 때 주의할 점은?
너무 복잡하거나 중첩된 로직은 오히려 읽기 어려워지기 때문에, 간단한 구조일 때 사용하는 것이 좋습니다.
컴프리헨션에서 else 조건을 넣을 수 있나요?
네, if와 else를 함께 써서 조건에 따라 다른 값을 넣을 수 있습니다. 이때는 표현식 안에 삼항 연산자를 사용해야 합니다.
속도면에서도 컴프리헨션이 더 빠른가요?
일반적으로 리스트 컴프리헨션이 더 빠르지만, 매우 큰 데이터나 복잡한 조건에서는 차이가 줄어들 수 있습니다.

📌 한 줄로 끝내는 파이썬 리스트 생성 기술

파이썬 리스트 컴프리헨션은 단순히 문법을 줄이기 위한 수단을 넘어서, 코드의 가독성작성 효율을 극대화해주는 기능입니다.
기본 구조만 익혀두면 반복 작업은 물론이고 조건문, 중첩 반복까지도 깔끔하게 처리할 수 있어요.

복잡한 로직을 한눈에 보여주는 컴프리헨션은 실무에서도 널리 쓰이며, 코드 리뷰 시에도 유리한 표현 방식입니다.
단, 너무 많은 조건과 반복을 한 줄에 넣기보다는 적절한 범위 내에서 간결함을 추구하는 것이 좋습니다.

이 글을 통해 리스트 컴프리헨션의 개념부터 활용, 그리고 주의사항까지 모두 익혔다면 이제 여러분도 for문을 대체할 스마트한 선택을 할 수 있게 되었을 거예요.
한 줄로 더 깔끔하고 똑똑한 파이썬 코딩, 지금 바로 시작해보세요!


🏷️ 관련 태그 : 파이썬기초, 리스트컴프리헨션, 파이썬반복문, 컴프리헨션사용법, 조건문리스트, 파이썬문법, 파이썬개발, 코딩초보, 파이썬튜토리얼, 프로그래밍입문