파이썬의 내장함수 map
- [리스트]나 (튜플) 자료구조의 값들에 반복적인 연산을 해주어야 할 때, 자주 쓰이는 아주 간편한 함수입니다.
- 기본 문법은 map(function, iterable)으로 function자리에 반복적으로 계산해주고자 하는 함수가 들어가고, iterable에는 리스트나 튜플 형태의 반복 가능한 자료형이 나오게됩니다.
예시로 아래의 문제를 풀어보겠습니다.
(프로그래머스 스쿨 > 코딩테스트 입문 > 연습문제 "369 게임")
369라는 숫자가 나오는 횟수를 정답으로 리턴하면 되는 문제입니다.
여기에서 저는 아래와 같이 for구문을 이용해서 값을 구해주었습니다.
각 수를 탐색하며, 3,6,9 중에 해당되는 문자가 나올때마다 횟수를 더해주는 방식이죠.
def solution(order):
answer = 0
for s in str(order):
if s == '3' or s=='6' or s=='9':
answer+=1
return answer
하지만 다른사람의 풀이를 봅시다.
count라는 내장함수와 map이라는 내장함수가 만나서 코드가 한줄, 한줄씩 줄어드는 것을 보실 수 있습니다.
(count라는 내장함수는 문자열이나 리스트에 있는 값의 횟수를 세어주는 함수로 string.count('a'), list.count(1) 이런식으로 사용될 수 있습니다.)
# count 함수만 사용한 경우
def solution(order):
answer = 0
order = str(order)
return order.count('3') + order.count('6') + order.count('9')
# count, map 함수를 사용한 경우
def solution(order):
return sum(map(lambda x: str(order).count(x), ['3', '6', '9']))
이 count라는 함수를 3,6,9라는 값에 대해서 중복으로 여러번 사용해야하기 때문에, 저렇게 반복되는 코드를 줄여주기 위해서 map을 사용할 수 있습니다.
- map(lambda x: str(order).count(x), ['3', '6', '9']))
: lambda를 사용하여 order(숫자형)을 str(order)로 바꾸고,
그 문자열에서 x = ['3', '6', '9'] 에 대한 count를 하나씩 계산해달라.
여기에서 주의할 점은 map으로 연산을 해준 다음 리턴되는 값을 어디에 어떻게 담아줄 것인지 설정해줘야한다는 것입니다. 예를 들어, 아래와 같이 그냥 map 함수로만 끝내면 error가 발생하는 것을 볼 수 있습니다.
a = map(str, range(10))
# Error 발생
File "<stdin>", line 1
a = map(str, range(10))
IndentationError: unexpected indent
따라서, 결과값에 적합한 함수로 한번 더 처리해주는 것을 잊지 말아야 합니다.
a = list(map(str, range(10)))
# Output
a
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
결과값에 대해서 list, tuple 등으로 묶어줄 수도 있고, 결과값이 숫자라면 sum, np.average 등의 함수로 연산을 마무리 해줄 수도 있습니다.
이렇게 네줄짜리 코딩을 한줄짜리로 만들어보았는데, 사실 속도는 네줄이 더 빠른것같기도합니다!
그래도 큰 차이는 없으니 더 깨끗한 코드가 좋을 수 있겠죠?
'Programming > python' 카테고리의 다른 글
Python 파이썬 대문자, 소문자 문자열 다루기 (0) | 2023.02.12 |
---|---|
파이썬 리스트 Python List 인덱싱(Indexing), 슬라이싱 (Slicing) 하는 방법 (0) | 2023.02.12 |
파이썬 집합 자료형 | Python set() (0) | 2023.02.08 |
파이썬 Python argparse 인수/인자 입력하는 방법 (커맨드 실행 시, 명령어 파라미터 추가) (0) | 2023.02.03 |
파이썬 Python 코드 실행 시간 계산하는 법 | time.time() (0) | 2023.01.31 |