본문 바로가기
DEV/파이썬 이론

파이썬 코딩 :: 파이썬 map, filter, lambda

by 올커 2022. 9. 2.

 

파이썬 map, filter, lambda


아래와 같은 딕셔너리가 있다고 해보자.

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

if문을 활용해서 'age'에 따라 '성인' 인지, '청소년'인지 판별하는 함수를 만들었다.

def check_adult(person):
    if person['age'] >20:
        return '성인'
    else:
        return '청소년'

딕셔너리 각 요소를 돌면서 판별값을 추출한 결과를 받아오고자 할 때,

함수를 각각 요소에 적용해야 하기 때문에 이때 'map'을 사용한다.

 

1. map

  - map(함수, 대상)

   : 대상 자료를 하나하나 돌면서 함수에 넣는다.

result = map(check_adult, people)
print(list(result))

>>> ['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']

각 결과값을 리스트에 담아 표현하기 위해 list(result)를 출력한다.

 

2. lambda로 식 간소화

  우선 위 함수를  삼항연산자를 활용하면 위의 if문은 아래와 같이 정리 가능하다.

def check_adult(person):
    return '성인' if person['age'] > 20 else '청소년'

함수를 굳이 만들지 않고 식을 사용하기 위해서 lambda식을 사용한다.

result = map(lambda x :('성인' if x['age'] > 20 else '청소년') , people)

 위 식을 감싸고 있는 것은 map함수이다. people을 돌면서 괄호 안의 함수를 적용한다.

 위 식이 복잡해보일 수 있으니 lambda식만 밖으로 빼보면 아래와 같다.

lambda x :('성인' if x['age'] > 20 else '청소년')

lambda식은 매개변수(x)와 식으로 구성한다.

# lambda 매개변수1, 매개변수2, ... : 매개변수를 사용한 표현식
lambda x: x + 10

# 아래 식과 동일(함수를 만들지 않음)
def plus_ten(x):
	return x + 10

위 표현을 보면 알 수 있듯이, 보통 함수를 한 줄로 간결하게 만들 때 사용한다.

또는 함수를 만들지 않고 사용해도 될 정도로 복잡하지 않거나 def를 사용하지 못할 경우 대체한다.

 

3. filter

 : filter는 map과 유사하게 사용가능하나 true만 추출한다.

  위 딕셔너리에서 'age'가 20보다 큰 요소만 뽑아온다고 하였을 때 아래와 같이 추출할 수 있다.

result = filter(lambda x:x['age']>20, people)

>>> [{'name': 'carry', 'age': 38}, {'name': 'ben', 'age': 27}, {'name': 'bobby', 'age': 57}, {'name': 'red', 'age': 32}, {'name': 'queen', 'age': 25}]

 

반응형

댓글