본문 바로가기

05. 빅분기 ADP/04. ADP

리스트 컴프리헨션(List compreshension)

1. 리스트 컴프리헨션(List Comprension)이란? 

리스트 컴프리헨션은 직관적으로 리스트를 생성하는 방법입니다. 대괄호 "[", "]"로 감싸고 내부에 for문과 if 문을 사용하여 반복하며 조건에 만족하는 것만 리스트로 생성할 수 있습니다.

 그냥 리스트를 생성하고 for문과 if문을 사용하면 되지 굳이 리스트 컴프리헨션을 사용할 필요가 있을지 궁금할 수 있습니다. 리스트 컴프리헨션을 사용하는 큰 이유는 직관적이고, 여러줄 쓸걸 한줄에 만들어 주기 때문입니다. 심지어 속도도 더 빠릅니다.

기본 구조

리스트 컴프리헨션의 기본 구조는 다음과 같습니다.

new_list = [expression for item in iterable if condition]

  • expression: 각 요소에 적용할 표현식
  • item: iterable의 각 요소
  • iterable: 반복 가능한 객체 (리스트, 튜플, range 등)
  • condition (선택 사항): 요소를 포함할 조건

리스트 컴프리헨션, 왜 써야 할까요?

  • 간결한 코드: 여러 줄의 반복문을 한 줄로 줄여 코드를 간결하게 작성할 수 있습니다.
  • 향상된 성능: 일반적인 반복문보다 실행 속도가 빠릅니다.
  • 높은 가독성: 코드의 의도를 명확하게 전달하여 가독성을 높입니다.

리스트 컴프리헨션 활용 예시

  1. 리스트의 각 요소를 제곱한 값으로 새로운 리스트 생성
    numbers = [1, 2, 3, 4, 5]
    squared_numbers = [x**2 for x in numbers]
    print(squared_numbers) # Output: [1, 4, 9, 16, 25]

  2. 리스트에서 짝수만 필터링하여 새로운 리스트 생성
    numbers = [1, 2, 3, 4, 5, 6]
    even_numbers = [x for x in numbers if x % 2 == 0]
    print(even_numbers) # Output: [2, 4, 6]

  3. 문자열 리스트에서 각 문자열의 첫 글자만 추출하여 새로운 리스트 생성
    words = ["apple", "banana", "cherry", "date"]
    first_letters = [word[0] for word in words]
    print(first_letters) # Output: ['a', 'b', 'c', 'd']

중첩 리스트 컴프리헨션

리스트 컴프리헨션은 여러 개의 반복문을 사용하여 다차원 리스트를 생성하는 데에도 활용할 수 있습니다.

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [x for row in matrix for x in row]
print(flattened) # Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]

"리스트 컴프리헨션, 알면 알수록 강력한 파이썬의 핵심 기능입니다. 오늘 배운 내용을 바탕으로 여러분의 코드를 더욱 간결하고 효율적으로 만들어보세요!"

 

2. 기초 사용법

리스트 컴프리헨션을 쓰지 않고, 0부터 4사이의 정수로 리스트를 생성 이를 리스트 컴프리헨션을 이용하면 코드처럼 한줄에 처리가 가능

리스트 컴프리헨션을 사용하는 이유는 대괄호 내에서 수식이나 함수 적용뿐만 아니라, if - else문으로 조건을 자유롭게 줄 수 있다는 점입니다.

(1) 수식적용 예

(2) 함수적용 예
사실 list 컴프리헨션을 쓰다 보면 이 조건문을 쓰는 게 매우 편리합니다. 조건문은 리스트 컴프리헨션에서 왼쪽에 쓸 수도 있고, 오른쪽에 쓸 수도 있습니다. if문만 쓸 때는 오른쪽에, if else문을 쓸때는 왼쪽에 씁니다.

오른쪽에 if문 사용

오른쪽에 if문을 여러 개 사용할 수 돼있습니다. 
왼쪽에 if문을 사용할 때는 반드시 else와 같이 사용해야 합니다.
* 코드 설명
i if i%2==0 else 'odd-1' if i==1 else 'odd-3' 분해해보겠습니다.
i if i%2==0 : i가 2로 나누어 떨어지면 i를 그대로 출력
else 'odd-1' if i==1 : 2로 나누어 떨어지지 않으면, i가 1일 때 'odd-1' 출력
else 'odd-3' : 위의 두 조건이 모두 성립하지 않으면 'odd-3' 출력
정리하자면, i가 2로 나누어 떨어지면 그대로 출력하고, 1일 때는 'odd-1'을 출력하고 그렇지 않은 경우는 3밖에 남지 않으므로, 3일 때 'odd-3'이 출력됩니다.
   

for문 2개 사용

리스트 컴프리헨션은 대괄호로 둘러쌓고 안에 코드를 입력하게 됩니다.
그런데 대괄호 대신에 중괄호 "{" "}"로 둘러쌓게 되면 집합 컴프리헨션(Set Comprehension)가 됩니다.
이때, 딕셔너리의 형식에 맞게 키(key)와 값(value)을 콜론(":")을 사용하면 딕셔너리 컴프리헨션(Dictionary Comprehension)이 됩니다.
   

 

'05. 빅분기 ADP > 04. ADP' 카테고리의 다른 글

데이터분석 공모전 준비 연습  (3) 2025.07.27
ADP 시험 범위 [필기]  (2) 2025.07.27
01. 파일 입출력  (0) 2025.04.05
00. 판다스(Pandas) 기본 자료구조  (0) 2025.04.05
00. 판다스(Pandas) 공식문서  (0) 2025.04.05