Home » Uncategorized » python map 함수에 대해 알아봅시다.

python map 함수에 대해 알아봅시다.

백준에서 python map 함수를 꽤 많이 썼습니다. 간단하게 알아봅시다.


[그림 1] python map에 대한 설명

이 함수에 대한 설명을 보면, iterator를 만든다고 되어 있어요. iterable한 무언가에 대해서 function을 적용한 결과를 리턴하는 이터레이터. 이터레이터는 __next__로 다음 원소를 불러오는 것이 주된 기능입니다. 당연하게도, 모든 원소를 불러왔는데 __next__를 호출했다면, StopIteration 에러가 발생하게 됩니다.

인자를 보면, 1번째 인자로 함수를, 2번째 인자로 iterable이 가능한 것, 예를 들자면 list를 넣어야 합니다. iterable이 가능하다면 순회를 할 수 있겠지요. 매번 순회를 하면서, 함수를 적용해서 새로운 결과를 돌려주게 됩니다.

[그림 2] iterable한 객체

[그림 2]는 iterable한 객체입니다. 이 객체에 대해서 각 원소에 대해서 계산된 결과를 가져오는 이터레이터를 돌려준다는 의미가 무엇일까요? 그림으로 이해해 보겠습니다.

먼저, 이터레이터가 1을 읽어요. function은 수를 문자열로 변환하는 것이라고 해 보겠습니다. 각 원소에 대해서 이터레이터를 돌릴 건데요. 1을 읽었어요. 1에 function을 적용하면 ‘1’이 됩니다. 이제 __next__를 호출해 보겠습니다.

다음에 읽은 것이 2입니다. 여기서, function을 적용하면 ‘2’가 됩니다. 왜냐하면 2가 문자열로 변환되면 ‘2’이기 때문입니다. 이렇게 각 원소들을 순회할 때 마다, func로 계산한 결과를 돌려주는 iterator를 map 함수가 돌려주게 됩니다.


[그림 3] 예제 1번 프로그램

먼저, 예제 프로그램 1을 보겠습니다. li는 1, 2, 3, 4, 5 순서대로 담고 있는 리스트입니다. 다음에, 우리는 map(str, li)로 li의 원소를 순회하는데, str 함수를 적용한 결과를 리턴하는 iterator를 반환하게 됩니다. 1을 읽을 때, ‘1’을 반환합니다. 그리고 2를 읽을 때 ‘2’를 반환합니다.

이 이터레이터를 list의 생성자의 인자로 받을 수 있습니다. 그러면 ‘1’, ‘2’, ‘3’, ‘4’, ‘5’ 순으로 돌면서 리스트에 추가될 겁니다.

[그림 4] 예제 1번 프로그램의 결과

실행 결과는 위와 같습니다. 사실 이 프로그램은 아래와 같이 단순화 시킬 수 있습니다.

[그림 5] 예제 1을 리스트 comprehension으로 처리한 코드

위 코드는 li에 있는 k에 대해서 str(k)를 한 결과를 li_to_str에 넣는다는 의미입니다. 예제 1번 프로그램과 정확히 같은 일을 하는 코드입니다.


[그림 5] 예제 2번 프로그램

백준에서 정수 2개를 입력받을 때, 이렇게 많이 사용합니다. 이것도 간단하게 해석해 볼까요? 일단, 1번째 줄에서 map(int, input().split())인데요. split에 아무런 인자도 없으면 white space를 기준으로 분리하게 됩니다. 예를 들어, 3 5 입력으로 들어왔다면 input().split()은 아래와 같이 분리될 겁니다.

‘3’과 ‘5’로 분리됩니다. 이것을 가지고 순회를 할 것인데요. 순회할 때 각 원소에 대해, int 함수를 적용한 결과를 돌려줄 거에요. 이러한 이터레이터를 map 함수가 리턴하게 됩니다.

그러면 1번째 원소를 불러와서 int 함수를 적용했을 때 3, 2번째 원소를 불러와서 int 함수를 적용하면 5가 나올 겁니다. 이 두 값이 각각 a, b에 할당되었습니다. 이제 a와 b를 더하면 8이 나옵니다. 실행 결과를 볼까요?

[그림 6] 예제 2번 프로그램의 결과

정확하게 8이 나옴을 볼 수 있습니다.

Leave a Comment

10 + 6 =