Mapping and lambda func

전창우·2023년 9월 15일
0

you know what?

목록 보기
2/3
post-thumbnail

나는 과거에 lambda 함수를 mapping한 데이터를 보면 괜스레 부담스러웠다.
이유는 사실 단순하다. 익명함수와 매핑에 대한 개념이 확립되지 않은 상태이기 때문이다.

하지만 생각보다 되게 단순하고, 어려운 개념이 아니었다.
이 글을 통해 과거의 나와 같은 경험을 하는 사람들에게 도움이 되었으면 한다.

map함수와 lambda 함수의 개념을 정리하고, lambda 함수를 mapping한 데이터가 왜 그러한 출력값을 나타내는 지 알아보자!

1. lambda func

익명 함수는 가벼운 def 함수이다.

함수를 사용해야 하는 상황이지만, 그 함수의 코드가 간단하여 굳이 함수로 선언할 필요가 없는 경우가 있을 것이다. 이런 경우에 함수를 딱 한 줄만으로 만들게 해주는 훌륭한 도구다.
콜론(:)을 기준으로 좌측에는 사용할 변수, 우측에는 변수에 적용할 연산을 기입한다.

(lambda x,y: x + y)(10, 20)
#>> 30

예를 들면, 수의 제곱을 append의 인자로 넘기고 싶은데, 이것 때문에 괜히 함수를 선언하기에는 무거울 수 있다. 이런 경우 lambda를 이용하면 되는 것이다.

before_=[1,2,3,4,5]
after_=[]
for i in data_:
    after_.append((lambda x:x**2) (i))
print(after_)
#>>[1,4,9,16,25]

2. map func

map은 인자로 받은 리스트를 인자로 받은 함수로 처리해주는 함수

map함수는 인자로 함수와 리스트를 받는다.

map(some_func,some_list)

함수의 동작은 두 번째 인자로 들어온 반복 가능한 자료형 (리스트나 튜플)을 첫 번째 인자로 들어온 함수에 하나씩 집어넣어서 함수를 수행하는 함수이다. 간단하게 자료형 하나하나에 인자로 넘긴 함수를 적용 시켜주는 함수이다.

def square(x):
    return x**2

numbers = [1, 2, 3, 4, 5]
squared_numbers = map(square, numbers)
print(list(squared_numbers))  # [1, 4, 9, 16, 25]

map은 여러 변수를 한 번에 입력 받을 때 사용되기도 한다. 여기서 map은 입력받은 자료형을 Int로 변환하여주는 역할을 한다.

num1,num2 = map(int, input().split())
print(num1, num2)

3.lambda 함수를 mapping한 데이터

사실 lambda 함수를 mapping한 데이터는 단순히 map의 인자에 lambda함수가 넘어간 것이란 걸 알게된다.

lambda와 map을 이용해서 간단하게 구구단을 계산하는 코드를 구현할 수 있다.

list(map(lambda x:(x//10)*(x%10), range(10,100)))

어떻게 위 코드가 구구단을 출력값으로 가지는지 생각해보면 lambda와 map을 이해하는 데 도움이 된다.

마치며

함수를 인자로 받는 함수는 많다. 그중 map이 가장 대중적이어서 그렇지 우리는 사실 map이 무서운 것이 아니라, 함수의 인자로 함수가 들어가는 것이 두려웠던 것은 아닐까?

위 글을 완전히 이해했다면 단순히 lambda 함수를 mapping한 데이터 외에도 인자로 함수가 들어가는 함수에 대한 이해에도 도움이 될 수 있을 것이다.

0개의 댓글