티스토리 뷰

목차



    Python Logo

     

    프로그래밍을 하다 보면, 더 짧고 효율적인 코드를 작성하고 싶다는 생각이 들 때가 많습니다. 특히 리스트를 다룰 때 반복문과 조건문을 많이 사용하는데, Python에서는 이를 한 줄로 간결하게 표현할 수 있는 리스트 컴프리헨션이라는 강력한 기능이 있습니다. 리스트 컴프리헨션은 처음에는 다소 복잡하게 느껴질 수 있지만, 잘 익혀두면 정말 유용하게 활용할 수 있습니다. 그동안 개발하면서 겪었던 경험으로 볼 때, 리스트 컴프리헨션을 잘 이해하는 것만으로도 코딩의 생산성이 눈에 띄게 향상될 수 있습니다. 부담 갖지 말고, 차근차근 따라해 보세요.


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

    리스트 컴프리헨션(List Comprehension)은 Python에서 리스트를 간결하고 효율적으로 생성하는 방법입니다. 기존의 for 반복문을 활용해 리스트를 생성하는 방법보다 더 짧고 읽기 쉬운 코드 작성을 가능하게 합니다.

    1.1 기본 구조

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

    [표현식 for 항목 in iterable]
    • 표현식: 리스트에 추가할 항목을 정의합니다.
    • 항목: iterable(리스트, 튜플, 문자열 등)의 각 요소를 가리킵니다.
    • iterable: 반복 가능한 객체입니다. 리스트, 튜플, 문자열 등이 올 수 있습니다.

    예를 들어, 1부터 5까지의 숫자를 포함하는 리스트를 생성하려면 다음과 같이 작성할 수 있습니다:

    numbers = [x for x in range(1, 6)]
    print(numbers)  # 출력: [1, 2, 3, 4, 5]

    이 구조는 다음과 같이 풀어 쓸 수 있습니다:

    numbers = []
    for x in range(1, 6):
        numbers.append(x)

    리스트 컴프리헨션은 이러한 반복문의 간단한 형태를 한 줄로 표현할 수 있는 강력한 도구입니다.

    1.2 리스트 컴프리헨션의 장점

    • 가독성: 코드가 간결해지고 직관적이므로, 리스트를 생성하는 목적이 명확하게 드러납니다.
    • 성능: 기존의 for 반복문을 사용하는 방식보다 더 빠르게 실행됩니다.
    • 유연성: 조건문이나 중첩된 반복문도 사용할 수 있어 복잡한 리스트 생성도 간단하게 처리할 수 있습니다.

    2. 리스트 컴프리헨션에 조건문 사용하기

    리스트 컴프리헨션은 단순히 반복문을 대체하는 것뿐 아니라, 조건문을 함께 사용하여 더 세밀한 리스트 생성이 가능합니다.

    2.1 조건문을 사용한 필터링

    리스트 컴프리헨션에서 if 문을 사용하여 특정 조건을 만족하는 요소만 선택할 수 있습니다. 예를 들어, 1부터 10까지의 숫자 중 짝수만 포함하는 리스트를 생성해 보겠습니다:

    even_numbers = [x for x in range(1, 11) if x % 2 == 0]
    print(even_numbers)  # 출력: [2, 4, 6, 8, 10]
    • if x % 2 == 0: x가 2로 나누어 떨어지는 경우만 리스트에 추가됩니다.

    2.2 조건문과 else를 함께 사용하기

    리스트 컴프리헨션에서 if-else 문을 사용하여 특정 조건을 만족하는 경우와 그렇지 않은 경우의 값을 각각 설정할 수도 있습니다.

    numbers = [x if x % 2 == 0 else -x for x in range(1, 11)]
    print(numbers)  # 출력: [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]
    • x가 짝수이면 그대로 x를, 홀수이면 -x를 리스트에 추가합니다.

    2.3 리스트 컴프리헨션과 중첩 조건문

    조건문을 중첩하여 리스트 컴프리헨션을 더 세밀하게 제어할 수 있습니다. 예를 들어, 1부터 20까지의 숫자 중 짝수이면서 4의 배수인 숫자만 포함하는 리스트를 생성해 보겠습니다:

    filtered_numbers = [x for x in range(1, 21) if x % 2 == 0 if x % 4 == 0]
    print(filtered_numbers)  # 출력: [4, 8, 12, 16, 20]

    여기서는 두 개의 조건문을 사용하여 리스트에 포함될 항목을 필터링합니다.


    3. 리스트 컴프리헨션과 중첩 반복문

    리스트 컴프리헨션은 중첩된 반복문도 지원하여 다차원 리스트(예: 행렬)와 같은 복잡한 데이터 구조를 간단하게 생성할 수 있습니다.

    3.1 기본 중첩 반복문 사용하기

    예를 들어, 1부터 3까지의 숫자와 'A'부터 'C'까지의 알파벳을 조합하여 리스트를 생성해 보겠습니다:

    combinations = [(x, y) for x in range(1, 4) for y in ['A', 'B', 'C']]
    print(combinations)  
    # 출력: [(1, 'A'), (1, 'B'), (1, 'C'), (2, 'A'), (2, 'B'), (2, 'C'), (3, 'A'), (3, 'B'), (3, 'C')]

    중첩된 for 문을 사용하여 각 숫자와 알파벳의 조합을 튜플 형태로 생성했습니다.

    3.2 2차원 리스트 생성

    리스트 컴프리헨션을 사용하여 2차원 리스트, 즉 행렬을 쉽게 생성할 수 있습니다. 예를 들어, 3x3 행렬을 다음과 같이 생성할 수 있습니다:

    matrix = [[x * y for y in range(1, 4)] for x in range(1, 4)]
    print(matrix)  
    # 출력: [[1, 2, 3], [2, 4, 6], [3, 6, 9]]

    이처럼 리스트 컴프리헨션을 활용하면 중첩된 구조도 간단하게 표현할 수 있습니다.


    4. 리스트 컴프리헨션 활용 예제

    리스트 컴프리헨션은 실제로 다양한 상황에서 활용될 수 있습니다. 몇 가지 실용적인 예제를 통해 리스트 컴프리헨션의 활용 방법을 더 깊이 이해해 보겠습니다.

    4.1 문자열에서 특정 문자 제거

    문자열에서 특정 문자를 제거하고 새로운 리스트를 생성해 보겠습니다. 예를 들어, 문자열 "Python Programming"에서 공백을 제거해 보겠습니다:

    text = "Python Programming"
    filtered_text = [char for char in text if char != ' ']
    print(filtered_text)  
    # 출력: ['P', 'y', 't', 'h', 'o', 'n', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'm', 'i', 'n', 'g']

    4.2 특정 조건에 맞는 숫자 제곱 값 리스트

    리스트 컴프리헨션을 사용하여 1부터 10까지의 숫자 중 홀수의 제곱 값을 저장하는 리스트를 생성해 보겠습니다:

    squares = [x**2 for x in range(1, 11) if x % 2 != 0]
    print(squares)  # 출력: [1, 9, 25, 49, 81]

    홀수인 경우에만 해당 숫자의 제곱 값을 리스트에 추가합니다.

    4.3 중첩 리스트 평탄화

    중첩된 리스트를 하나의 리스트로 평탄화하는 작업도 리스트 컴프리헨션을 통해 쉽게 처리할 수 있습니다:

    nested_list = [[1, 2, 3], [4, 5], [6, 7, 8]]
    flat_list = [item for sublist in nested_list for item in sublist]
    print(flat_list)  
    # 출력: [1, 2, 3, 4, 5, 6, 7, 8]

    이처럼 리스트 컴프리헨션은 간단한 반복문을 활용하여 중첩된 리스트를 처리하는 데 매우 유용합니다.


    요약 디스크립션

    Python 리스트 컴프리헨션은 코드의 간결성과 효율성을 높이는 강력한 도구입니다. 이 글에서는 리스트 컴프리