개요
- PS를 하며 map() 함수를 사용하던 중, 다음 코드를 실행하니 아무것도 출력 되지 않았다.
map*(lambda x:*print*(x*2), *list*(*map*(*int*,*input*().split())))
- 하지만 이를 list()로 감싸니 정상적으로 출력이 되었다.
list(map*(lambda x:*print*(x*2), *list*(*map*(*int*,*input*().split()))))
따라서 map 객체에 대해 찾아보았다.
map() 함수 및 map 객체의 특징
- map()을 통해 반환된 객체는 map 객체이며, 이터레이터(iterator, 순회 가능한 객체)이다.
- list가 아니기 때문에 필요시 list()를 사용해 리스트 형식으로 변환하여야 한다. (python3부터)
- 한 번에 데이터를 계산하지 않고, 필요할 때에만 계산한다.
- 입력 데이터가 크거나 무한할 때 메모리를 효율적으로 사용할 수 있다.
- 한 번만 이터레이션 하면 다시 이터레이션 할 수 없다. 필요하다면 다시 생성해야 한다.
- 인덱싱을 할 수 없다.
관련 메서드 및 사용법
기본 사용
map(function, iterable)
예시 1 - 두 수를 입력받아 int형으로 언패킹하기
X, Y = map(int, input().split()
예시 2 - 여러 수를 입력 받아 int형으로 바꾸고 list 객체로 변환하기
my_list = list(map(int, input().split())
예시 3 - lambda와 함께 사용하기
number = [1,2,3,4]
new_number = list(map(lambda x:x*2, number))
예시 4 - next()와 함께 사용하기
number = [1,2,3,4]
map_number = map(lambda x:x*2, number)
result1 = next(map_number)
result2 = next(map_number)
print(result1, result2)
개요에서 발견한 문제점
- map 객체는 입력 데이터를 한 번에 처리하지 않기 때문에, map 객체 생성만으로는 lambda 함수가 실행되지 않은 것이다.
- list()로 변환 시 변환 중에 모두 처리됨을 알 수 있다.