Python map() 함수, 예제와 함께 설명

게시 됨: 2022-08-25

이 자습서에서는 Python map() 함수 를 사용하여 iterable의 모든 항목에 함수를 적용하는 방법을 배웁니다.

Python은 프로그래밍 방식으로 함수 계산으로 작업을 정의할 수 있는 함수형 프로그래밍 패러다임을 지원합니다. Python 함수를 객체로 취급할 수 있습니다. 함수는 다른 함수를 매개변수로 사용하고 다른 함수를 반환할 수 있습니다.

map() 함수는 함수를 인수로 받아 시퀀스의 모든 항목에 적용할 수 있도록 합니다.

이 튜토리얼이 끝나면 Python map() 함수를 사용하여 장황한 루프와 목록 이해를 다시 작성할 수 있습니다. map() 함수를 사용할 수 있는 다양한 방법을 이해하기 위해 몇 가지 예제를 코딩할 것입니다.

Python 목록의 요소에 함수를 적용하는 방법

Python 목록의 요소에 함수 적용

예를 들어 토론을 시작하겠습니다.

여기서 nums 는 숫자 목록입니다.

 nums = [2,4,3,7]

다음으로 self_pow() 함수를 고려하십시오. self_pow() 함수는 인수로 숫자를 받아 숫자 자체의 거듭제곱으로 제곱한 숫자를 반환합니다: n**n.

파이썬에서 **는 지수 연산자입니다. a**b는 b, a b 의 거듭제곱 값을 반환합니다.

 def self_pow(n): return n**n

nums_pow : 목록 nums 의 모든 요소에 self_pow() 함수를 적용하여 새 목록 nums_pow 를 생성합니다.

for 루프 사용

이렇게 하려면 Python에서 for 루프를 사용할 수 있습니다.

  • nums 목록의 모든 숫자에 대해 num 을 인수로 사용하여 self_pow() 함수를 호출합니다.
  • 새 목록 nums_pow 에 함수 호출 결과를 추가합니다.
 nums_pow = [] for num in nums: nums_pow.append(self_pow(num)) print(nums_pow)

출력에서 모든 숫자 nums 는 자체적으로 발생합니다. nums_pow 목록의 요소는 2 2 , 4 4 , 3 3 ,7 7 입니다.

 Output [4, 256, 27, 823543]

목록 이해 사용

목록 이해를 사용하여 이것을 간결하게 만들 수 있습니다. 위의 명시적 for 루프에서 출력 표현식과 루프할 목록을 식별할 수 있습니다.

python-map-function-motivation

그런 다음 일반 목록 이해 표현식을 수정할 수 있습니다.

 new_list = [<output expression> for item in iterable]

nums_pow 목록을 생성하기 위한 목록 이해 표현식은 다음과 같습니다.

 nums_pow = [self_pow(num) for num in nums] print(nums_pow)

출력은 예상대로 for 루프를 사용한 것과 동일합니다.

 Output [4, 256, 27, 823543]

루프 및 목록 이해 대신 반복 가능한 모든 항목에 함수를 적용하는 데 도움이 되는 간결한 구문과 함께 Python map() 함수를 사용할 수 있습니다. map 함수의 문법을 배우는 것부터 시작합시다.

파이썬 map() 함수 구문

파이썬 map() 함수 구문

사용할 일반 구문 Python map() 함수는 다음과 같습니다.

 map(function, iterable_1,[iterable_2,...,iterable_n])

map() 함수는 적어도 두 개의 인수( 함수iterable )를 취합니다.

위 구문에서:

  • function 은 Python 함수 또는 일반적으로 Python 호출 가능을 나타냅니다. 여기에는 사용자 정의 및 내장 함수, 클래스, 인스턴스 및 클래스 메서드 등이 포함됩니다.
  • iterable 은 목록, 튜플 및 문자열과 같은 유효한 Python 이터러블입니다.
  • map() 함수는 iterable모든 항목에 함수 를 적용합니다.

map() 함수는 무엇을 반환합니까?

지도 객체를 반환합니다. 그런 다음 list(map(function,iterable)).

사용 사례에 따라 Python 튜플로 캐스팅할 수 있습니다.

map() 함수는 무엇을 반환합니까?

이제 Python map() 함수의 구문을 배웠으므로 예제 코딩을 시작하겠습니다.

이 튜토리얼을 따라 하려면 Python 3.x가 있어야 합니다. 그렇지 않으면 Geekflare 온라인 Python 편집기에서 코드 조각을 실행할 수 있습니다.

사용자 정의 함수와 함께 map() 함수를 사용하는 방법

사용자 정의 함수와 함께 map() 함수 사용

#1 . 이전에는 nums 목록의 모든 숫자에 self_pow() 함수를 적용했습니다. map() 함수의 구문에서 self_pow 함수와 목록 nums 를 인수로 전달할 수 있습니다.

참고 : 함수 호출이 아닌 함수의 이름만 지정해야 합니다. self_pow() 가 아닌 self_pow 를 사용하십시오.

map() 함수는 지도 객체를 반환합니다.

 print(map(self_pow,nums)) <map object at 0x7f7d315c14d0>

그런 다음 아래와 같이 list() 함수를 사용하여 지도 객체를 목록으로 캐스팅할 수 있습니다.

 nums_pow = list(map(self_pow,nums)) print(nums_pow)

다음은 nums 의 모든 numnums_pow 목록의 num num 에 매핑되는 출력입니다.

 Output [4, 256, 27, 823543]

#2 . 인치를 센티미터로 변환하는 다음 함수 inch_to_cm() 를 고려하십시오. 1인치 = 2.54cm .

 def inch_to_cm(inch): return inch*2.54

inches 목록의 인치 값을 센티미터로 변환하려면 아래 코드 셀과 같이 map() 함수를 사용할 수 있습니다.

 inches = [5.54,3.4,1,25,8.2] cms = list(map(inch_to_cm,inches)) print(cms)

cms 목록에는 센티미터로 표시된 인치 값이 포함됩니다.

 Output [14.0716, 8.636, 2.54, 63.5, 20.828]

내장 함수와 함께 map() 함수를 사용하는 방법

내장 함수와 함께 map() 함수 사용

이 섹션에서는 Python에서 내장 함수와 함께 map() 을 사용하는 방법을 배웁니다.

#1 . 목록 strings 은 프로그래밍 언어 목록입니다. 프로그래밍 언어 문자열을 대문자로 포함하는 새 목록 strings_upper 를 만들고 싶습니다.

 strings = ['JavaScript','Rust','Python','Go']

기본 제공 문자열 메서드 .upper() 는 문자열에 대해 작동하고 대문자로 서식이 지정된 복사본을 반환합니다.

 strings_upper = list(map(str.upper,strings)) print(strings_upper)

strings_upper 목록에는 대문자로 형식이 지정된 목록 strings 의 문자열이 포함됩니다.

 Output ['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']

#2 . Python의 내장 len() 함수는 시퀀스를 인수로 받아 길이를 반환합니다. strings 목록에서 각 문자열의 길이를 찾으려면 아래와 같이 map() 함수를 사용하고 각 문자열에 길이 함수를 적용할 수 있습니다.

 strings_len = list(map(len,strings)) print(strings_len)
 Output [10, 4, 6, 2]

#3 . 튜플과 같은 다른 컬렉션과 함께 map() 함수를 사용할 수 있습니다.

다음 예에는 침실, 면적 및 집이 위치한 도시의 수에 대한 정보가 포함된 튜플이 포함되어 있습니다.

Python에서 type() 함수는 모든 Python 객체의 데이터 유형을 반환합니다. 이 튜플에 있는 모든 항목의 데이터 유형을 가져오려면 map() 함수를 사용하여 각 튜플 항목에 대해 type 함수를 호출할 수 있습니다.

 house = (2,758.5,'Bangalore') house_elt_type = tuple(map(type,house)) print(house_elt_type)

맵 개체를 튜플로 캐스트했습니다. 목록이나 다른 컬렉션으로 캐스팅할 수도 있습니다.

아래 출력에서 ​​2, 758.5 ​​및 Bangalore의 데이터 유형이 각각 'int', 'float' 및 'str'로 추론되었음을 알 수 있습니다.

 Output (<class 'int'>, <class 'float'>, <class 'str'>)

#4 . Python에서는 내장 모듈을 가져오고 모듈에 정의된 기능을 사용할 수 있습니다.

nums 목록에 있는 모든 숫자의 제곱근을 계산하려면 수학 모듈에서 제곱근 함수 sqrt 를 사용할 수 있습니다.

 import math nums = [30,90,34,45,97] nums_sqrt = list(map(math.sqrt,nums)) print(nums_sqrt)
 Output [5.477225575051661, 9.486832980505138, 5.830951894845301, 6.708203932499369, 9.848857801796104]

위의 출력은 구문 분석하고 따르기 어렵습니다. 소수점 이하 두 자리까지 각 제곱근 값을 반올림할 수 있습니다.

Python에서 부동 소수점 숫자를 반올림하는 방법

부동 소수점 값을 가져와 소수점 이하 두 자리로 반올림하는 함수 round_2() 를 정의해 보겠습니다.

 def round_2(num): return round(num,2)

이제 round_2nums_sqrt 목록과 함께 map() 함수를 사용할 수 있습니다.

 nums_sqrt_round = list(map(round_2,nums_sqrt)) print(nums_sqrt_round)
 Output [5.48, 9.49, 5.83, 6.71, 9.85]

내부 맵 함수가 제곱근 list nums_sqrt 를 계산하는 데 사용되고 외부 맵 함수가 반올림 연산을 수행하는 중첩된 map() 함수를 사용할 수도 있습니다.

 nums_sqrt_round = list(map(round_2,list(map(math.sqrt,nums)))) print(nums_sqrt_round)
 Output [5.48, 9.49, 5.83, 6.71, 9.85]

출력은 위의 두 접근 방식 모두에서 동일합니다. 그러나 위에 표시된 것처럼 함수를 중첩할 때 코드를 읽고 유지 관리할 수 있는지 확인해야 합니다.

Lambda 함수와 함께 map() 함수를 사용하는 방법

Lambda 함수와 함께 map() 함수 사용

이전 섹션에서 내장 및 사용자 정의 함수와 함께 Python map() 함수를 사용하는 방법을 배웠습니다. 이제 Python에서 익명인 람다 함수와 함께 map() 함수를 사용하는 방법을 배웁니다.

때로는 본문에 한 줄의 코드만 포함된 함수가 있고 함수를 한 번만 사용하고 프로그램의 다른 곳에서 참조하지 않아야 할 수도 있습니다. Python에서 람다 함수 와 같은 함수를 정의할 수 있습니다.

참고 : lambda args: expression 은 Python 람다 함수를 사용하는 일반적인 구문입니다.

#1 . 다음 목록 strings 을 고려하십시오. 각 문자열의 반전된 복사본을 포함하는 strings_rev 목록을 얻으려고 한다고 가정합니다.

 strings = ['JavaScript','Rust','Python','Go']

문자열 슬라이싱을 사용하여 Python 문자열을 뒤집을 수 있습니다.

참고 : 이것은 문자열 슬라이싱 표현식 str[start:stop:step] 의 일반화입니다.

startstop 값이 없으면 슬라이스는 문자열의 시작 부분에서 시작하여 문자열의 끝까지 확장됩니다.
step 의 음수 값은 문자열의 끝에서 시작하는 슬라이스를 제공합니다.
– 따라서 str[::-1] 은 str의 반대 복사본을 반환합니다.

다음 람다 함수를 사용할 수 있습니다. lambda x:x[::-1] 아래와 같이 map 함수 내부.

 strings_rev = list(map(lambda x:x[::-1],strings)) print(strings_rev)

다른 예와 마찬가지로 지도 개체를 목록으로 캐스팅합니다. 출력에서 목록 문자열의 각 문자열이 반전되었음을 알 수 있습니다.

 Output ['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']

#2 . 이전 섹션에서 숫자 목록에 있는 모든 숫자의 제곱근을 계산한 다음 각 제곱근 값을 소수점 이하 두 자리로 반올림했습니다.

이를 위해 round_2() 함수를 사용했습니다. round_2() 함수를 람다 함수로 다시 작성하고 아래에서 설명하는 map() 함수와 함께 사용합시다.

 nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt)) print(nums_sqrt_round_l)

아래에서 볼 수 있듯이 출력은 round_2() 함수를 사용하여 얻은 것과 동일합니다.

 Output [5.48, 9.49, 5.83, 6.71, 9.85]

여러 Iterable과 함께 map() 함수를 사용하는 방법

여러 Iterable과 함께 map() 함수 사용

우리가 본 예제에서 정확히 하나의 iterable의 모든 항목에 함수를 적용했습니다.

때로는 두 개 이상의 인수를 취하는 함수가 있을 수 있습니다. 이 경우 각 인수는 목록 또는 유사한 컬렉션에 저장됩니다.

여러 목록과 함께 Python map() 함수를 사용할 수도 있습니다.

#1 . lengthbreadth 를 입력으로 받아 length*breadth 면적을 반환하는 다음 함수 area() 를 고려하십시오.

 def area(length,breadth): return length*breadth

서로 다른 직사각형의 길이와 너비는 각각 lengthsbreadths 라는 두 개의 개별 목록에 저장됩니다.

 lengths = [4,8,10,18] breadths = [9,4,6,11]

map() 함수를 사용하여 lengthsbreadths 목록을 모두 전달하여 위 목록에 area 함수를 적용할 수 있습니다.

 areas = list(map(area,lengths,breadths)) print(areas)

함수 영역은 두 개의 인수를 허용하므로 길이 및 너비 값은 각각 lengths breadths 목록에서 사용됩니다.

 Output [36, 32, 60, 198]

#2 . Python 수학 모듈에는 임의의 밑수에 대한 로그를 계산하는 데 도움이 되는 log 함수가 있습니다.

참고 : log(x, base)log x 값을 base , log base x 값으로 지정된 밑으로 반환합니다. 밑이 지정되지 않은 경우 기본 밑 값은 e 입니다(log는 자연 로그를 계산함).

이 예에서:

  • 목록 x 는 로그를 계산하려는 값에 해당합니다.
  • base 목록에는 로그 계산에 사용할 모든 기본 값이 포함됩니다.
 x = [2,6,12,10] base = [2,3,2,5]

Python map() 함수를 math.log , 목록, xbase 와 함께 사용하여 다음과 같이 새 목록 log_x 를 얻을 수 있습니다.

 log_x = list(map(math.log,x,base)) print(log_x)

다음은 출력입니다.

 Output [1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]

결론

이 튜토리얼에서 배운 내용을 요약하면 다음과 같습니다.

  • Python map() 함수는 map(function, iterable(s)) 구문을 사용하여 함수와 iterable의 두 가지 이상의 인수를 취합니다.
  • 함수 는 모든 유효한 Python 호출 가능일 수 있습니다.
  • 함수k 인수를 받을 때 함수와 함께 map() 함수를 사용하고 iterable에서 k 인수 각각을 사용합니다.

다음으로 Python에서 집합으로 작업하는 방법을 배웁니다.