본문 바로가기
Python

제어문 - 반복문 (3): 리스트 컴프리헨션에 대해 배우기

by 공학텔러 2023. 7. 16.

파이썬

소개

안녕하세요, Python을 사랑하는 모든 분들에게 이 글을 바칩니다. 이전 포스트에서는 Python의 반복문에 대해 배웠습니다. 특히 forwhile 반복문의 기본적인 사용법부터, breakcontinue를 이용한 반복문의 제어, 그리고 반복문을 중첩하여 사용하는 방법까지 다양한 주제를 다루었습니다. 그러나 Python에는 또 하나의 강력한 반복문 도구가 존재합니다. 바로 '리스트 컴프리헨션'입니다. 이는 특정한 패턴이나 규칙을 가지는 리스트를 쉽고 빠르게 생성할 수 있게 해주는 도구입니다. 이 포스트에서는 이 '리스트 컴프리헨션'에 대해 자세히 알아보겠습니다. 포스트의 구성은 다음과 같습니다:

  • 1. 리스트 컴프리헨션의 정의와 기본 구조
  • 2. 리스트 컴프리헨션의 사용법 - 기본 사용법
  • 3. 리스트 컴프리헨션의 사용법 - 조건문 사용법
  • 4. 리스트 컴프리헨션의 사용법 - 중첩된 리스트 컴프리헨션

이제 함께 Python의 리스트 컴프리헨션 세계로 빠져보시죠!


제어문 - 반복문 (3): 리스트 컴프리헨션에 대해 배우기

리스트 컴프리헨션의 정의와 기본 구조

리스트 컴프리헨션은 리스트를 만드는 간단하고 강력한 방법입니다. 이는 기본적으로 반복문과 조건문을 사용하여 리스트를 생성하는 것을 한 줄의 코드로 간단하게 할 수 있게 해주는 Python의 특성입니다. 리스트 컴프리헨션은 특정 패턴이나 규칙을 가진 리스트를 빠르게 생성하는 데에 효과적입니다. 리스트 컴프리헨션의 기본 구조는 다음과 같습니다:

python

[표현식 for 항목 in 반복가능객체]

여기서 "표현식"은 리스트의 각 항목에 적용되는 식이며, "항목"은 반복가능객체에서 순차적으로 선택되는 개별 요소를 의미합니다. "반복가능객체"는 리스트, 튜플, 문자열 등과 같이 순회할 수 있는 객체를 말합니다.

간단한 예시를 통해 이를 이해해 보겠습니다.

python

numbers = [1, 2, 3, 4, 5]

squares = [number ** 2 for number in numbers]

print(squares)   출력: [1, 4, 9, 16, 25]

위 코드에서 number ** 2가 표현식, number가 항목, numbers가 반복가능객체에 해당합니다. , numbers 리스트의 각 요소를 순회하면서 해당 요소를 제곱하여 새로운 리스트를 생성하고 있습니다. 이처럼 리스트 컴프리헨션을 사용하면, 간결하고 읽기 쉬운 코드로 복잡한 작업을 수행할 수 있습니다. 이제 리스트 컴프리헨션의 다양한 사용법에 대해 알아보겠습니다.


리스트 컴프리헨션의 사용 - 기본 사용법

리스트 컴프리헨션의 가장 기본적인 사용법을 살펴보겠습니다. 리스트 컴프리헨션을 사용하면, 간단한 코드 한 줄로 리스트를 만들 수 있습니다.

아래의 예시를 통해 기본적인 리스트 컴프리헨션의 사용법을 확인해 봅시다.

python

numbers = [1, 2, 3, 4, 5]

squares = [number ** 2 for number in numbers]

print(squares)   출력: [1, 4, 9, 16, 25]

위의 코드에서, numbers라는 리스트가 있고, 이 리스트의 각 요소를 제곱하여 새로운 리스트 squares를 만들고 있습니다. number ** 2라는 표현식은 numbers 리스트의 각 요소에 적용되며, 이를 통해 새로운 리스트가 생성됩니다. 이처럼 리스트 컴프리헨션을 통해 for 반복문과 같은 반복적인 작업을 간단하게 축약할 수 있습니다. 이 때이때, '항목' 부분에는 반복 가능한 객체의 각 요소가 들어갑니다. 이는 리스트뿐만 아니라, 문자열이나 튜플과 같은 다른 반복 가능한 객체에서도 동일하게 적용됩니다. 리스트 컴프리헨션을 이용해 문자열의 각 문자를 대문자로 변환하는 예제를 살펴봅시다.

python

original_str = 'python'

upper_str = [char.upper() for char in original_str]

print(upper_str)   출력: ['P', 'Y', 'T', 'H', 'O', 'N']

위의 예제에서 char.upper()라는 표현식은 original_str 문자열의 각 문자에 적용되며, 각 문자를 대문자로 변환하여 새로운 리스트를 만들고 있습니다. 이처럼, 리스트 컴프리헨션은 다양한 상황에서 사용할 수 있으며, 코드를 더욱 간결하고 명확하게 만들어줍니다. 다음 섹션에서는 조건식을 포함하는 리스트 컴프리헨션에 대해 살펴보겠습니다.


리스트 컴프리헨션의 사용 - 조건문 사용법

이번에는 리스트 컴프리헨션에서 조건문을 어떻게 사용하는지 알아보겠습니다. 조건문을 사용하면, 특정 조건을 만족하는 요소만으로 리스트를 만드는 것이 가능합니다.

아래의 예시를 통해 리스트 컴프리헨션과 조건문의 결합법을 확인해 봅시다.

python

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

even_numbers = [number for number in numbers if number % 2 == 0]

print(even_numbers)   출력: [2, 4, 6, 8, 10]

위의 코드에서, numbers라는 리스트가 있고, 이 리스트의 각 요소 중에서 짝수인 요소만으로 새로운 리스트 even_numbers를 만들고 있습니다. number % 2 == 0이라는 조건문은 numbers 리스트의 각 요소에 대해 적용되며, 이 조건문을 만족하는 요소만 새로운 리스트에 포함됩니다. 이처럼 리스트 컴프리헨션에는 조건문을 추가하는 것이 가능하며, 이를 통해 복잡한 리스트를 간단하게 생성할 수 있습니다. 이 때, '항목' 부분에는 조건문을 만족하는 반복 가능한 객체의 각 요소가 들어갑니다. 만약 리스트 컴프리헨션에서 if-else 조건문을 사용하고 싶다면, 다음과 같이 사용할 수 있습니다.

python

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

new_numbers = [number if number % 2 == 0 else -number for number in numbers]

print(new_numbers)   출력: [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]

위의 코드에서는 numbers 리스트의 각 요소에 대해, 요소가 짝수인 경우에는 그대로, 홀수인 경우에는 음수로 변환하여 새로운 리스트 new_numbers를 만들고 있습니다. 리스트 컴프리헨션은 간결한 코드로 복잡한 리스트를 생성할 수 있게 해주는 강력한 도구입니다. 다음 섹션에서는 리스트 컴프리헨션을 이용한 중첩 반복에 대해 살펴보겠습니다.


리스트 컴프리헨션의 사용 - 중첩 리스트 컴프리헨션

리스트 컴프리헨션은 중첩하여 사용할 수 있습니다. 이를 이용하면 보다 복잡한 구조의 리스트를 간결하게 생성할 수 있습니다. 리스트 컴프리헨션을 중첩하여 사용하는 것은 for문을 중첩하여 사용하는 것과 유사한 개념입니다. , 한 리스트 컴프리헨션 내부에 다른 리스트 컴프리헨션을 포함할 수 있다는 의미입니다.

다음은 중첩 리스트 컴프리헨션의 사용 예시입니다:

python

nested_list = [[i*j for j in range(1, 4)] for i in range(1, 4)]

print(nested_list)   출력: [[1, 2, 3], [2, 4, 6], [3, 6, 9]]

위의 코드에서는 외부 리스트 컴프리헨션의 각 항목이 또 다른 리스트 컴프리헨션인 형태를 볼 수 있습니다. 이렇게 중첩된 리스트 컴프리헨션은 리스트의 리스트, 2차원 리스트를 생성하는 데 효과적입니다. 이런 식으로 리스트 컴프리헨션은 다양한 형태와 조합으로 사용될 수 있습니다. 어떤 데이터를 다루느냐에 따라 적절한 사용 방법이 달라질 수 있으니, 여러 가지 예제를 통해 연습해 보시는 것을 추천드립니다. 다음 섹션에서는 리스트 컴프리헨션의 효율성에 대해 설명하겠습니다.


결론

이 포스트에서는 Python의 유용한 기능 중 하나인 리스트 컴프리헨션에 대해 알아보았습니다. 리스트 컴프리헨션을 사용하면 for 루프를 사용하여 리스트를 생성하는 것보다 훨씬 간결하고 읽기 쉬운 코드를 작성할 수 있습니다. 우리는 리스트 컴프리헨션의 기본적인 사용 방법을 배우고, 조건문을 사용하는 방법, 그리고 중첩된 리스트 컴프리헨션을 이용한 복잡한 리스트 생성 방법에 대해 배웠습니다. 하지만 무조건적으로 리스트 컴프리헨션을 사용하는 것이 좋은 것은 아닙니다. 경우에 따라, 특히 코드의 가독성이 중요한 경우에는 기존의 루프 구조를 사용하는 것이 더 적합할 수도 있습니다. 따라서 여러분이 작성하는 코드와 그 상황에 가장 적합한 도구를 선택하는 능력이 중요합니다. 다음 포스트에서는 Python의 다른 제어문인 함수에 대해 알아보겠습니다. Python 학습에 있어서 함수는 매우 중요한 개념이므로, 다음 포스트도 기대해 주세요. 그럼, 행복한 코딩되세요!

 

추가적으로 도움이 될만한 포스팅을 추천드리겠습니다.

 

제어문 - 반복문(2): for 문과 range 함수의 사용법에 대해 배우기

제어문 - 반복문(2): for 문과 range 함수의 사용법에 대해 배우기 Python은 프로그래밍 언어 중 하나로, 초보자도 쉽게 배울 수 있고 다양한 분야에서 활용할 수 있다는 점이 매력적입니다. Python의 핵

engineering-teller.tistory.com

 

제어문 - 반복문 (1): while문 사용 방법에 대해 배워보자

소개 프로그래밍에서 반복문은 매우 중요한 요소 중 하나입니다. 반복문은 동일하거나 유사한 작업을 여러 번 수행할 때 사용되며, 코드의 간결성과 가독성을 높이고 작업의 효율성을 높이는데

engineering-teller.tistory.com

 

제어문 - 조건문(2): elif, else문 사용법 배우기

제어문 - 조건문(2): elif, else문 사용법 배우기 Python 프로그래밍 언어에서 코드의 흐름을 제어하는 가장 기본적인 도구 중 하나는 '조건문'입니다. 이전 포스트에서는 조건문 중 'if'문에 대해 알아

engineering-teller.tistory.com

 

댓글