[Python] 11. 파이썬의 내장함수 map()
map() 함수
주어진 함수를 반복 가능한(iterable) 객체의 모든 요소에 각각 적용하여 그 결과를 새로운 이터레이터로 반환하는 함수
map(function, iterable)
function : iterable(반복가능한)객체의 각 요소에 적용할 함수
iterable : 함수를 적용할 iterable(반복가능한)객체(리스트,튜플,문자열,딕셔너리등)
- map() 함수는 1차원의 iterable(반복가능한) 객체에 적용가능
- 주로 리스트의 모든 원소에 대해 일괄적으로 연산을 적용하거나 변환할 때 사용
- map() 함수는 iterable객체의 모든 요소에 대해 function 함수를 적용한 결과를 새로운 iterator로 반환
- 일반적으로 map객체(주소)를 반환하기 때문에 list(),tuple()등으로 출력
def multiply(x):
return x*2
list1 = [10,20,30,40]
multiply_list1 = map(multiply,list1)
#<map object at 0x000001A5D45CDDE0>
- map() 함수는 입력받은 iterable한 객체 각각에 대해 특정 함수를 적용한 결과를 이터레이터로 반환
- 위 코드의 출력 결과는 <map object at 0x000001A5D45CDDE0>의 이터레이터를 반환
- 반환된 이터레이터는 리스트 또는 iterable한 다른 자료형으로 변환하거나 for문으로 값을 직접 순회하며 출력 가능
#반환된 이터레이터를 리스트 자료형으로 출력
def multiply(x):
return x*2
list1 = [10,20,30,40]
multiply_list1 = list(map(multiply,list1)) #[20, 40, 60, 80]
#반환된 이터레이터를 for문을 사용해서 출력
def multiply(x):
return x*2
list1 = [10,20,30,40]
multiply_list1 = map(multiply,list1)
for result in multiply_list1:
print(result)
#20
#40
#60
#80
# map()함수에 lambda함수를 활용한 경우
list1 = [10,20,30,40]
multiply_list1 = list(map(lambda x: x*2,list1)) #[20, 40, 60, 80]
# map()함수를 활용해서 리스트 입력
a = list(map(int,input()))
b = list(map(int,input().split()))
- map() 함수 동작원리
- map() 함수 호출 시, function 함수와 iterable 객체들을 파라미터로 호출
- map() 함수는 iterable 객체의 인덱스를 활용하여 각각의 요소를 하나씩 인자로 받아 iterable 객체 중 길이가 가장 짧은 객체의 길이만큼 function 함수를 적용
- map() 함수는 function 함수의 실행 결과를 이터레이터 객체로 저장
- map() 함수가 iterator 객체를 반환
- iteraor 객체를 필요한 형태(ex.리스트)로 가공하여 출력
이터레이터(Iterator)
- 이터레이터(Iterator)는 값을 차례로 반환할 수 있는 객체
- 이터레이터는 값을 필요로 할 때마다 값을 생성하므로 메모리를 효율적으로 사용할 수 있습니다.
- 이터레이터는 목록이나 배열과 달리 한 번에 모든 값을 메모리에 저장하지 않고, 필요한 시점에 값을 생성하여 제공
* map() 함수는 입력된 함수를 적용한 결과를 차례로 반환하는 이터레이터 객체를 반환
제너레이터(Generator)
- 제너레이터(Generator) 객체는 이터레이터를 생성하는 데 사용되는 특별한 종류의 객체
- 이터레이터를 직접 만들 때 사용하는 코드
- 이터레이터를 생성하는 함수
- 제너레이터는 함수의 실행 중에 값을 생성하고 메모리에 저장하지 않으며, 필요할 때마다 값을 생성
- 제너레이터는 한 번에 모든 값을 메모리에 저장하지 않기 때문에 대량의 데이터를 처리할 때 효율적이며, 루프나 반복문에서 사용할 때 특히 유용