Python List Comprehension

2020년 7월 3일 수정

≡ 목차 (Table of Contents)

보통 함수형 언어들의 핵심 일꾼(?)인 map과 filter의 사용법이 Python에서는 특별한 문법으로도 제공된다. List Comprehension이라는 이름인데 한국어로는 뭐라고 표현해야 할지를 몰라서 그냥 원문으로 쓴다.

Map의 대체 기능

Map은 리스트를 가공할 때 사용한다. 즉 입력 리스트의 내용을 가공해서 새로운 리스트를 생성하는 목적으로 사용된다. 예를 들어 어떤 값 리스트를 입력으로 각 값을 제곱한 리스트를 만들어 내는 List Comprehension 예제를 살펴보자.

[x * x for x in somelist]

제일 앞에 있는 식이 가공(출력)하는 식이다. 그 뒤의 for 문을 통해 모든 아이템을 순환한다는 것을 간접적으로 이해할 수 있다.

다른 언어, 예를 들어 Swift 방식으로 풀어보면 대충 이런 식의 코드와 동일하다.

somelist.map { $0 * $0 }

물론 언어 마다 특징도 있고 문법적 장단점이 있으니 뭐가 우월하네 이런 식으로 비교할 필요는 없을 것 같다.

Filter의 대체 기능

Filter는 이름처럼 리스트에서 불필요한 값을 걸러낼 때 사용한다. 아래는 somelist라는 리스트에서 각 아이템이 iswhat 함수의 결과를 만족하는 경우만을 뽑아서 별도의 리스트로 생성하는 List Comprehension 문법 예제이다.

[x for x in somelist if iswhat(x)]

뒤에 붙어있는 if 의 의미만 이해한다면 어려울 것 없는 문법 같다.

이번에도 Swift와 살짝 비교해보자.

somelist.filter { iswhat($0) }

별로 어려울 건 없는 것 같다.