티스토리 뷰

파이썬 map 함수에 대한 사용법과 개념 그리고 예제에 대해서 알아보려고 한다.

 

<목차>
 - map 함수 개념 및 기본 설명
 - map 함수 예제
    1) input().split()과 map() 함수
    2) list와 map() 함수
    3) lambda와 map() 함수
    4) map() 내에서 다중 반복자 사용

map 함수 개념 및 기본 설명

map(function, iterable)

 

map함수의 모양은 위와 같다.

첫 번째 매개변수로는 적용 함수가 오고,

두 번째 매개변수로는 해당 함수에 적용  반복 가능한 (iterable) 자료형이 온다.

여기서, iterable한 자료형이란 리스트, 튜플, 세트 등과 같이 원소들을 하나씩 순회할 수 있는 자료형을 의미한다.

 

map 함수의 반환값은 map 객체로, 리스트나 튜플과 같은 시퀀스 자료형이 아니다.

따라서 map 객체를 list 혹은 tuple로 형 변환시켜주어야 한다.

이렇게 변환하면 적용된 함수의 결과를 담은 시퀀스 자료형을 얻을 수 있다.

  • list(map(함수, 리스트)
  • tuple(map(함수, 튜플))

함수의 동작은 두 번째 인자로 전달된 iterable한 자료형 (리스트나 튜플)에 포함된 각 원소들

첫 번째 인자로 전달된 함수에 순서대로 적용하는 것이다.

즉, map(적용시킬 함수, 적용할 값들)를 의미한다.

( 참고로 iterable 형태인지 아닌지 궁금하다면 for문을 돌렸을 때 출력이 되는 형태는 다 iterable 형태라고 보면 된다.)

 

예를 들어, 실수가 저장된 리스트가 있을 때, 이 리스트의 모든 요소를 정수로 변환하려면 어떻게 해야할까?

먼저, for 반복문을 사용해서 변환해보겠다.

# for 반복문 이용 
a=[1.1, 2.2, 3.3, 4.4, 5.5]
for i in range(len(a)):
    a[i] = int(a[i])
print(a) # [1, 2, 3, 4, 5]

 

for에 range(len(a)를 사용해서 인덱스를 가져와 요소 하나하나에 접근한 뒤 int로 변환하여 다시 저장하였다.

매번 for 반복문으로 반복하면서 요소에 접근하여 변환하려는 번거로움이 있다.

 

이때, map 함수를 이용하면 편리하다.

# map 함수 이용 
a=[1.1, 2.2, 3.3, 4.4, 5.5]
a= list(map(int,a))
print(a) # [1, 2, 3, 4, 5]

 

mapint와 list를 넣으면 알아서 자동적으로 리스트의 모든 요소를 int를 사용해서 변환해 map 객체를 반환해 준다.

우리는 그걸 list로 형 변환해서 사용하면 된다.


map 함수 예제

1) input().split()map() 함수

 

input().split()을 사용하면 입력 받은 값을 공백을 기준으로 나눈 후 문자열 리스트를 얻는다.

즉,  input().split()의 결과가 문자열 리스트라서 map() 을 사용할 수 있었다.

 

다음과 같이 input().split()을 사용한 뒤에 변수 한 개에 저장해보면 리스트인지 확인할 수 있다.

a = input().split() #input값: 10 30
print(a) # ['10', '30']

 

 

이제 map() 을 사용해서 정수로 변환해보자.

a = input().split() #input값: 10 30
print(map(int,a)) # <map object at 0x000001DA1FA6D160>
print(list(map(int,a))) # [10, 30]

 

먼저, 10 30을 입력하면 map 객체가 만들어진다. 이 상태로는 안에 들어있는 값을 볼 수 없으므로 list를 사용해 출력했다. list를 보면 [10, 20]처럼 정수 두 개가 들어있습니다.

 

해당 리스트 [10, 30]을 변수 두 개에 저장하면 지금까지 사용한 i, j = map(int, input().split())와 같은 동작이 된다.

사실 map이 반환하는 map 객체는 iterator라서 변수 여러 개에 저장하는 언패킹(unpacking)이 가능하다.

따라서 a, b = map(int, input().split())처럼 list를 생략한 것이다. (참조)

i, j = map(int, input().split()) #input값: 10 30
print(i) # 10
print(j) # 30

 

 

2) list와 map() 함수

 

- map함수는 python에서 사용할 수 있는 다른 내장 함수와 함께 사용 가능하다.

  다음 예제는 math.ceil() 함수를 사용하여 주어진 값을 올림하는 예제이다.

# Python 내장 함수와 함께 map() 사용 
import math
print(list(map(math.ceil,[2.3456, 4.4567,7.8324,9.9102]))) # [3, 5, 8, 10]

 

 

- 파이썬에서 문자열은 배열처럼 작동하므로, 문자열에서도 map() 사용가능하다.

# 문자열과 함께 map() 사용
def str_upper(s):
    return s.upper()

updated_str = map(str_upper,'welcome')
for i in updated_str:
    print(i,end="") # WELCOME

 

- 숫자 목록을 가져와, 연산 또는 문자열로 변환 가능하다.

# 숫자 목록과 함께 map() 사용
def square(n): # 제곱
    return n*n

print(list(map(square,[1,2,3,4,5]))) # [1, 4, 9, 16, 25]
# 숫자 목록과 문자열을 함께 map() 사용
print(list(map(str,range(10)))) #['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

 

 

3) lambda와 map() 함수

 

map의 첫 번째 인자로 함수가 들어가니깐

이름 없는 함수 즉, lambda 함수도 사용할 수 있죠!

특히, 간단하거나 일회성일 경우, lambda 함수를 사용하는 것이 효율적이다.

코드가 더 간결해지고 가독성이 좋아지기 때문이다.

# 일반 함수 사용 
def func_mul(n):
    return n*10

print(list(map(func_mul, [1,2,3,4,5]))) # [10, 20, 30, 40, 50]

# lambda와 함께 map() 사용 
print(list(map(lambda x: x*10,[1,2,3,4,5]))) # [10, 20, 30, 40, 50]

 

람다 함수에 대해서 더 알고싶으면 [바로가기]

 

4)  map() 내에서 다중 반복자 사용

 

하나 이상의 반복자, 즉 list, tuple 등을 모두 동시에 map() 함수에 전달하여 사용할 수 있다.

 

def func_map(list1,list2):
    return list1+list2

# 두 개의 목록 반복자를 map()에 전달
print(list(map(func_map, ['a','b','c'],['1','2','3']))) # ['a1', 'b2', 'c3']

# 하나의 튜플과 목록 반복자를 map()에 전달
print(list(map(func_map, ['a','b','c'],{'1','2','3'}))) # ['a1', 'b2', 'c3']
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함