본문 바로가기

Python

[Python] map, lambda

map

map(function, iterable)

map 함수의 모양은 위와 같은데 첫 번째 매개변수로는 함수를 쓰고, 두 번째 매개변수로는 반복 가능한 자료형을 쓴다.

map 함수는 뒤에 나온 자료형에서 인자를 하나씩 빼서 앞에 함수를 실행시켜준다. 예제를 통해 살펴보면

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}
]

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

result = map(check_adult, people)

print(list(result))

밑에 result 변수쪽을 보면 people에서 딕셔너리를 꺼내와서 조건문을 실행시켜주는 역할을 하고  있다.

map함수의 반환 값은 map object이기 때문에 list()와 같이 자료형으로 형 변환을 시켜줘야 한다.

 

lambda

함수를 쓸 때, 복잡하거나 반복되는 코드를 편하게 불러오기 위해서 만드는데
간단한 동작을 하는 가벼운 함수를 만들기 위해 사용되는 함수가 lambda 함수이다.
lambda 인자: 표현식 으로 나타내는데 예제를 보면

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

우선 people은 위의 코드와  똑같이 되어있다.

코드를 살펴보면 people의 인자를 x에 담고 x의 'age'가  20보다 크면 '성인' , 작으면 '청소년'을  반환한다.

위의 check_adult와 똑같은 기능을 하지만 이렇게 한 줄로 줄여 쓸 수 있다.


알고리즘 문제를 풀다가 다른 사람의 풀이에 나온 것을 보아서 복습을 했는데,

map이나 lambda를 써야하는 문제가 나왔을 때 적용해 볼 수  있을 것 같다.

그런 문제가 나왔을 때 빠르게 잡아내서 적용해보고 싶지만 눈치를 잘 못 채는거 같다.