Story 08 두 함수를 대신하는 리스트 컴프리헨션

유동헌·2021년 9월 30일
0

열혈파이썬_중급

목록 보기
7/8

map과 filter를 대신하는 리스트 컴프리헨션

이번 스토리의 제목이 두 함수를 대신하는~ 인데, 여기서 말하는 두 함수는 map과 filter.

리스트 컴프리헨션을 이용하면 확실히 이 두 함수를 대체할 수 있다.

단순 예제

>>> st1 = [1,2,3]
>>> st2 = list(map(lambda n : n ** 2, st1))
>>> st2
[1, 4, 9]

리스트 컴프리헨션 예제

>>> st1 = [1,2,3]
>>> st2 = [i ** 2 for i in st1]
>>> st2
[1, 4, 9]

그리고 다음은 filter를 사용하는 단순 예제

>>> st = [1,2,3,4,5]
>>> ost = list(filter(lambda n : n % 2, st))
>>> ost
[1, 3, 5]

이 역시 컴프리헨션 기반으로 다음과 같이 작성할 수 있다.

>>> st = [1,2,3,4,5]
>>> ost = [i for i in st if i % 2 != 0]
>>> ost
[1, 3, 5]

다음은 1 ~ 10의 자연수 중에서 홀수들을 대상으로 그 제곱 값을 리스트에 담는 예로써 map과 filter가 동시에 사용되었다.

>>> st = list(range(1, 11))
>>> st
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> fst = list(map(lambda n : n ** 2, filter(lambda n : n % 2, st)))
>>> fst
[1, 9, 25, 49, 81]

그런데 이를 리스트 컴프리헨션 기반으로 대체라면 다음과 같이 간결해진다.

>>> st = list(range(1, 11))
>>> fst = [n ** 2 for n in st if n % 2]
>>> fst
[1, 9, 25, 49, 81]

위의 예에서 보이듯이 map에 filter까지 더해지는 상황에서는 확실히 리스트 컴프리헨션 기반의 코드가 더 간결하다. 그러므로 map 또는 filter를 사용해야 하는 경우, 특히 map과 filter를 동시에 사용해야 하는 경우에는 리스트 컴프리헨션으로 대체하는 것에 대해 생각해 볼 수 있다.

profile
지뢰찾기 개발자

0개의 댓글