초보 개발자

8강 map과 filter를 대신하는 리스트 컴프리헨션 본문

Python/윤성우 열혈 파이썬

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

taehyeki 2021. 12. 16. 14:58

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

map

st1 = [1,2,3]
st2 = list(map(lambda n: n**2, st1)) # 제곱의 결과를 리스트로 묶음
st2
[1,4,9]

이는 리스트 컴프리헨션으로 다음과 같이 작성할 수도 있다

st1 = [1,2,3]
st2 = [n**2 for n 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 = [n for n in st if n % 2]
ost
[1,3,5]

 

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,91]

이는 리스트 컴프리헨션으로 다음과 같이 작성할 수도 있다

st = list(range(1,11))
st
[1,2,3,4,5,6,7,8,9,10]
fst = [n**2 for n in st if n % 2 ]
fst
[1,9,25,49,91]

n**2가 map을 대신하였고 if n % 2가 filter를 대신하였다.

위의 예에서 보이듯이 map에 filter까지 더해지는 상황에서는 확실히 리스트 컴프리헨션 기반의 코드가 더 간결하다

그러므로 map, filter를 사용해야 하는 경우, 특히 map과 filter를 동시에 사용해야 하는 경우에는 리스트 컴프리헨션으로 대체하는 것에 대해 생각해 볼 필요가 있다.