티스토리 뷰
파이썬 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]
map에 int와 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']
'파이썬' 카테고리의 다른 글
[Python 파이썬] *args와 **kwargs 개념과 예제 (0) | 2024.05.16 |
---|---|
[Python 파이썬] 언패킹(unpacking) 개념과 예제 (0) | 2024.05.16 |
[Python 파이썬] eval() 함수: '수식' 연산 (0) | 2024.05.15 |
[Python 파이썬] 패킹(packing) 개념과 예제 (0) | 2024.05.15 |
[Python 파이썬] replace() 함수: '문자열 치환' (0) | 2024.05.15 |
- Total
- Today
- Yesterday
- 파이썬
- adrew ng 머신러닝 강의
- 강의노트 정리
- python
- 딥러닝
- 앤드류응
- sorted
- 경사하강법
- baekjoon
- 로지스틱 회귀
- action value function
- Andrew Ng
- *
- numpy 배열 생성
- 숏코딩
- state value function
- 강화학습
- **kwargs
- computation graph
- **
- 백준
- *args
- policy function
- NumPy
- 손실함수
- Sort
- 11870
- numpy 배열 속성
- 비용함수
- omp: error #15
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |