파이썬 map() 함수

Python map() 함수는 지정된 반복 가능한 객체의 모든 요소에 함수를 적용하고 map 객체를 반환하는 데 사용됩니다. Python map 객체는 반복자이므로 그 요소를 반복할 수 있습니다. 또한 map 객체를 리스트, 튜플 등과 같은 순차 객체로 변환할 수도 있습니다. 이를 위해 해당 팩토리 함수를 사용합니다.

Python map() 함수

Python map() 함수 구문은 다음과 같습니다:

map(function, iterable, ...)

map() 함수에 여러 반복 가능한 인수를 전달할 수 있으며, 이 경우 지정된 함수는 해당하는 인수의 수만큼 있어야 합니다. 이 함수는 이러한 반복 가능한 요소에 병렬로 적용됩니다. 여러 반복 가능한 인수를 사용하는 경우, map 반복자는 가장 짧은 반복 가능한 객체가 소진될 때까지 중지됩니다.

Python map() 예시

map() 함수와 함께 사용할 함수를 작성해 봅시다.

def to_upper_case(s):
    return str(s).upper()

이 함수는 입력 객체의 대문자 문자열 표현을 반환하는 간단한 함수입니다. 또한 반복자 요소를 인쇄하는 유틸리티 함수를 정의합니다. 이 함수는 공백과 함께 반복자 요소를 인쇄하며, 모든 코드 스니펫에서 재사용될 것입니다.

def print_iterator(it):
    for x in it:
        print(x, end=' ')
    print('')  # for new line

다른 유형의 이터러블에 대한 map() 함수 예제를 살펴보겠습니다.

문자열과 함께 사용하는 Python map()

# 문자열과 함께 사용하는 map()
map_iterator = map(to_upper_case, 'abc')
print(type(map_iterator))
print_iterator(map_iterator)

결과:

<class 'map'>
A B C 

튜플과 함께 사용하는 Python map()

# 튜플과 함께 사용하는 map()
map_iterator = map(to_upper_case, (1, 'a', 'abc'))
print_iterator(map_iterator)

결과:

1 A ABC 

리스트와 함께 사용하는 Python map()

map_iterator = map(to_upper_case, ['x', 'a', 'abc'])
print_iterator(map_iterator)

결과:

X A ABC 

map을 리스트, 튜플, 집합으로 변환하기

map 객체는 이터레이터이므로, 리스트, 튜플, 집합 등을 생성하는 팩토리 메서드의 인자로 전달할 수 있습니다.

map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_list = list(map_iterator)
print(my_list)

map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_set = set(map_iterator)
print(my_set)

map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_tuple = tuple(map_iterator)
print(my_tuple)

결과:

['A', 'B', 'C']
{'C', 'B', 'A'}
('A', 'B', 'C')

lambda와 함께 사용하는 Python map()

우리는 lambda 함수를 map()과 함께 사용할 수 있습니다. 이를 재사용하고 싶지 않을 때 유용합니다. 이 함수가 작고 새로운 함수를 정의하고 싶지 않을 때 유용합니다.

list_numbers = [1, 2, 3, 4]

map_iterator = map(lambda x: x * 2, list_numbers)
print_iterator(map_iterator)

출력:

2 4 6 8 

Python map() 다중 인수

여러 개의 이터러블 인수와 함께 map() 함수를 사용하는 예제를 살펴보겠습니다.

# 다중 이터러블 인수를 사용한 map()
list_numbers = [1, 2, 3, 4]
tuple_numbers = (5, 6, 7, 8)
map_iterator = map(lambda x, y: x * y, list_numbers, tuple_numbers)
print_iterator(map_iterator)

출력: 5 12 21 32 함수에는 두 개의 인수가 있습니다. 출력 map 이터레이터는 이 함수를 두 개의 이터러블 요소에 병렬로 적용한 결과입니다. 이터러블의 크기가 다른 경우 어떻게 동작하는지 살펴보겠습니다.

# 크기가 다른 다중 이터러블 인수를 사용한 map()
list_numbers = [1, 2, 3, 4]
tuple_numbers = (5, 6, 7, 8, 9, 10)
map_iterator = map(lambda x, y: x * y, list_numbers, tuple_numbers)
print_iterator(map_iterator)

map_iterator = map(lambda x, y: x * y, tuple_numbers, list_numbers)
print_iterator(map_iterator)

출력:

5 12 21 32 
5 12 21 32 

인수의 크기가 다른 경우, map 함수는 요소가 모두 소진될 때까지 적용됩니다.

None 함수를 사용한 Python map()

함수를 None으로 전달할 때의 동작을 살펴보겠습니다.

map_iterator = map(None, 'abc')
print(map_iterator)
for x in map_iterator:
    print(x)

출력:

Traceback (most recent call last):
  File "/Users/pankaj/Documents/github/journaldev/Python-3/basic_examples/python_map_example.py", line 3, in <module>
    for x in map_iterator:
TypeError: 'NoneType' object is not callable

당신은 우리의 GitHub 저장소에서 완전한 파이썬 스크립트와 더 많은 파이썬 예제를 확인할 수 있습니다.

참고: 공식 문서

Source:
https://www.digitalocean.com/community/tutorials/python-map-function