[Python] map 함수란? 활용법(lambda)

반응형

python logo

map 함수란?

python을 사용하다 보면 map함수를 많이 사용하게 됩니다. map함수는 여러 데이터를 한 번에 일괄적으로 변화하는 

기능을 합니다. 주로, 여러 데이터를 담고 있는 리스트에 사용합니다.

기초 사용법

map(함수, 리스트)

보통 위와 같은 형태로 사용합니다. 실제 예시와 함께 알아보겠습니다. 반지름 리스트가 주어졌을 때, map 함수를 이용하여, 반지름 리스트에 대응하는 원의 넓이 리스트를 생성해보겠습니다.

기초 예시) 원의 넓이

import math # math 라이브러리 불러오기

radius_li = [1,3,5,7] # 반지름 리스트

def area(r):
    return math.pi * (r**2) # math.pi는 원주율값을 갖습니다.

list(map(area,radius_li)) 
#리스트 값: [3.141592653589793, 28.274333882308138, 78.53981633974483, 153.93804002589985]

radius_li는 반지름 값으로 이루어진 리스트입니다. 반지름을 input으로 하고, 원의 넓이[반지름의 제곱 곱하기 파이(원주율)]를 반환하는 area함수를 만듭니다. 마지막으로 map함수는 함수(area)와 리스트(radius_li)를 입력받아 리스트의 각 원소에 함수를 일괄적으로 적용해줍니다. 위의 예제처럼 함수를 정의해서 map함수에 같이 쓰기도 하지만, 보통 lambda를 이용하여 map함수를 쓰는 경우가 많습니다. lambda를 쓰면 간단하게 일회용 함수를 만들어 사용할 수 있기 때문입니다.

 

lambda함수란?

lambda함수는 일회용으로 쓸 함수를 간단히 만드는 기능을 합니다. 함수를 정의해서 쓸 수 있지만, 한 번 간단히 쓸 때는 함수를 정의하기보단, lambda가 간편하여 많이 사용합니다.

lambda 인자리스트: 수식

lambda는 위와 같은 형태로 사용됩니다. 예시와 함께 알아보겠습니다.

 

기초 예시) lambda 함수

list(map(area,radius_li)) 
# 출력 : [3.141592653589793, 28.274333882308138, 78.53981633974483, 153.93804002589985]

list(map(lambda x: math.pi * (x**2), radius_li))
# 출력: [3.141592653589793, 28.274333882308138, 78.53981633974483, 153.93804002589985]

첫 번째 리스트는 위에서 area함수를 만들어서 쓴 경우이고, 아래에는 lambda를 이용하여 area함수와 똑같은 기능을 하는 일회용 함수를 만들었습니다. 인자 리스트로 x 하나만 줬고, 수식으로 파이에 x의 제곱을 곱하는 식을 줬습니다.

 

활용 예시) 문자열로 이루어진 리스트에 map과 lambda 사용

string = ['a pple','ba nana','gr ape']

list(map(lambda x: x.replace(' ',''),string)) 
# 출력: ['apple', 'banana', 'grape']

문자열 3개로 이루어진 string 리스트에서, 각 원소별로 공백을 제거하는 예제입니다. lambda x: x.replace(' ', '')를 사용하였습니다. 각 문자열에 replace를 통해 공백을 제거합니다.

 

마치며

map함수만 사용하게 되면 아래와 같이 map 객체만 출력됩니다.

map 객체

그래서 보통 map함수가 적용된 뒤에 앞에 list() 함수를 사용하여 리스트로 변환시킵니다. map함수와 lambda함수를 사용하면 데이터를 일괄적으로 원하는 형태에 맞게 한 줄로 짤 수 가있어 매우 간편합니다.

 

Reference
Python logo: https://ourcodeworld.com/articles/read/734/why-is-python-the-future-of-programming
코드 실행 결과: https://github.com/netsus/python_practice/blob/master/python_practice_4_map_and_lambda.ipynb
반응형

댓글

Designed by JB FACTORY