[Python] - List Comprehension

김진수·2020년 11월 29일
0
post-thumbnail
post-custom-banner

지능형 리스트 (List Comprehension) :

Python 에서는 리스트 구성을 위해 항목을 하나하나 나열하는 방식외에 구문을 통해 sequence 형태의 데이터를 가공하여 리스트를 구성하는 방법을 제공하고 있다. 지능형 리스트를 사용하게 되면 코드가 간결해지고 상황에 따라서는 성능이 좋은 코드를 작성할 수 있다.

간단한 예시

어떤 수의 제곱수를 담고 있는 리스트를 만들고 싶다고 가정합시다. 즉 차례대로 1, 4, 9, 16, 25, 36 .. 이런 식으로 이어지는 리스트입니다. 1의 제곱부터 10의 제곱까지 담겨 있는 리스트를 만드려면 아래와 같이 하면 됩니다.

코드를 이해하기에는 그렇게 많이 어렵지 않습니다.
하지만 지능형 리스트를 이용하면 리스트를 만드는 과정을 단 한 줄로 줄일 수 있습니다.

for - in 루프 용법

기본

가장 기본적인 형태의 용법은 다음과 같습니다.

  • A: 최종적으로 리스트에 들어갈 요소입니다. 함수 호출이 되어도 되고 계산 식이 되어도 됩니다. 여기서는 B를 활용할 수 있습니다. (대부분 활용합니다)
  • B : C의 요소 하나하나를 나타냅니다.
  • C : 지능형 리스트에서 활용할 또 다른 리스트입니다.

가장 간단한 형태의 예시를 살펴보면 다음과 같습니다. 우선 위 예제와 똑같이 제곱 수들을 구하는 예제입니다. 아래 예제는 * 연산을 시도하고 있습니다.

함수 호출도 가능합니다.

중첩

지능형 리스트는 내부에서 중첩할 수 있습니다. 그러니까 for-in 부분을 여러 번 사용할 수 있다는 뜻입니다. 간단하게 두 개의 for문을 돌려 하나의 튜플을 만드는 걸 상상해봅시다. 아래 예제에서는 두 개의 for-in만 중첩되었지만 중첩 횟수는 제한이 없습니다!

이 때에는 순서가 어떻게 되냐면, 일단 i를 0~2까지 돌립니다. 그 내부에서 j를 0~3까지 돌립니다. 그 이후 i와 j가 포함된 튜플을 생성합니다. 이를 일반 식으로 고치면 다음과 같습니다.

이 때에는 순서가 어떻게 되냐면, 일단 i를 0~2까지 돌립니다. 그 내부에서 j를 0~3까지 돌립니다. 그 이후 i와 j가 포함된 튜플을 생성합니다. 이를 일반 식으로 고치면 다음과 같습니다.

중첩할 때, 두 개의 지능형 리스트를 중첩시킬 수도 있습니다.

if 활용

우리가 만약에 어떤 리스트에 있는 값 중 특정 값 이상만 받아오고 싶다면 어떻게 해야 할까요? 아래는 사람이 딕셔너리 형태로 저장되어 있는 리스트에서 age 키의 값이 9 이상인 항목을 가져오고 싶다고 가정합니다. 즉 9살 이상인 사람만 받고 나머지는 걸러내겠다는 뜻이지요.

바로 for 뒤에 if 절을 추가시켜주면 됩니다. 이렇게 하면 해당 if 절의 결과가 참일 때에만 루프가 실행됩니다.

profile
백엔드 개발자
post-custom-banner

0개의 댓글