파이썬 map함수 질문있습니다.

조회수 2347회

파이썬에서 유용하게 쓰이는 map함수의 첫번째 인자는 함수인데, 두번째 인자는 반복가능한 자료형이라는게 정확히 무슨 뜻인지 모르겠습니다.

그리고 반환형이 리스트형이라면 왜 list(map(함수, iterable))와 같이 앞에 list를 굳이 붙이는 이유가 뭐죠?

1 답변

  • 좋아요

    2

    싫어요
    채택 취소하기

    좋은 질문이네요.

    자 우선 map 이라는 함수의 용도는 어떤 컬렉션(집합)의 모든 요소에 대해 첫번째 인자인 함수의 인자로 대입하여 실행하고 결과를 컬렉션으로 받기 위해 사용하는 겁니다.

    예를들어

    numbers = range(1, 11)
    
    def multiply(number):
        return number * 2
    
    list(map(multiply, numbers))
    [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
    

    numbers 에는 1~10 까지의 수가 있습니다.

    map(multiply, numbers) 는 numbers 를 반복하여 첫요소부터 끝요소까지 하나씩 꺼내어 multiply 함수인자로 대입하여 결과를 저장하라는 겁니다.

    즉 [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] 와 같이 만들게 됩니다.

    사실 이 부분의 이해는 함수형 프로그래밍을 공부해보면 이해하기가 좋습니다. 함수형 프로그래밍은 근래의 모던한 언어들은 (어느정도는)모두 제공하는 필수적인 요소라고 할 수 있습니다.

    쉽게 사상을 집합으로 다루게 해주기 때문에 간결한 논리표현에 많은 도움이 됩니다.

    그리고 왜 map 의 결과에 list로 변환을 하는 이유를 설명드리면 파이썬 2 에서는 list로 결과를 받았기 때문에 명시적인 변환이 필요없었습니다.

    python 3 이 되면서 generator 로 결과값이 변경되었습니다.

    그 이유는 메모리 사용을 줄이기 위해서입니다.

    range 함수도 python 2에서는 list를 반환했었습니다.

    python 2 에서는 range(0, 99999999) 와 같이 큰 list를 생성하면 메모리가 부족하게 되기 때문에 생성할 수가 없었습니다.

    그러나 python 3 에서는 generator 를 반환하기 때문에 메모리 사용률에 관계없이 사용할 수 있습니다.

    그 이유로 map 의 결과값도 list가 아닌 generator 를 반환합니다. generator 이기 때문에 list 를 이용해서 반복을 모두 수행하게 하는 것입니다.

    generator 는 python 3 의 컬렉션에서 핵심이니 꼭 이해하시기 바랍니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)