티스토리 뷰

728x90

map은

함수와 Iterable(반복이 가능한 자료형태, 리스트, 튜플 등)의 두 값을 사용하는 함수입니다.

 

map 함수를 실행하면

지정된 함수를 Iterable의 각 항목에 적용하고 결과를 생성하는 반복자를 반환하게 됩니다.

 

map의 기본 형태

map(function, iterable)

 

기존 리스트의 각 요소를 2배씩 증가시킨 후

새로운 리스트에 요소를 입력하는 코드입니다.

 

1) 함수 작성 후 적용

원본데이터 = [1, 2, 3]

def 함수(x):
    return x * 2

m = map(함수, 원본데이터)

결과 = list(m)
print(결과)  # [2, 4, 6]

 

2) 람다식 적용

원본데이터 = [1, 2, 3]

m = map(lambda x: x * 2, 원본데이터)

결과 = list(m)
print(결과)

 

함수든 람다식 이든 return 되는 값에 의해 새로운 값이 생성되게 됩니다.

 

 

그런데 여기서 list()를 생략하는 경우 map 이 동작하지 않습니다.

이해를 돕기 위한 다른 코드 예시입니다.

nums = [1, 2, 3, 4, 5]
result = []

m = map(lambda num: result.append(num), nums)

result  # []

return 되는 부분에 result 리스트에 값을 넣으라는 코드가 입력되어 있습니다.

그리고 result의 값을 확인해보면 비어있는 리스트로 나오게 됩니다.

 

list()를 사용하지 않아서 map에 정의된 코드가 실행되지 않아서 그렇습니다.

 

위에서 map 함수를 실행하면

결과를 생성하는 반복자를 반환하게 된다고 했습니다.

 

반환된 반복자가 동작이 되어야 정의된 코드가 실행되는데 그렇지 못한 상태입니다.

 

반복자를 동작시키는 방법은 크게 2가지 입니다.

list 함수로 감싸거나, for 반복문으로 반복시키거나

 

그래서 코드를 수정하면 다음과 같습니다.

nums = [1, 2, 3, 4, 5]
result = []

m = map(lambda num: result.append(num), nums)

list(m)
print(result)  # [1, 2, 3, 4, 5]
nums = [1, 2, 3, 4, 5]
result = []

m = map(lambda num: result.append(num), nums)

for _ in m:
    pass
result  # [1, 2, 3, 4, 5]