Python/Python

[Python] 11. 파이썬의 내장함수 map()

구름솜:D 2024. 9. 8. 15:55
728x90

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() 함수 동작원리

  1. map() 함수 호출 시, function 함수와 iterable 객체들을 파라미터로 호출
  2. map() 함수는 iterable 객체의 인덱스를 활용하여 각각의 요소를 하나씩 인자로 받아 iterable 객체 중 길이가 가장 짧은 객체의 길이만큼 function 함수를 적용 
  3. map() 함수는 function 함수의 실행 결과를 이터레이터 객체로 저장
  4. map() 함수가 iterator 객체를 반환
  5. iteraor 객체를 필요한 형태(ex.리스트)로 가공하여 출력

 

이터레이터(Iterator)

- 이터레이터(Iterator)는 값을 차례로 반환할 수 있는 객체

- 이터레이터는 값을 필요로 할 때마다 값을 생성하므로 메모리를 효율적으로 사용할 수 있습니다. 

- 이터레이터는 목록이나 배열과 달리 한 번에 모든 값을 메모리에 저장하지 않고, 필요한 시점에 값을 생성하여 제공

 

* map() 함수는 입력된 함수를 적용한 결과를 차례로 반환하는 이터레이터 객체를 반환

 

 

제너레이터(Generator)

- 제너레이터(Generator) 객체는 이터레이터를 생성하는 데 사용되는 특별한 종류의 객체

- 이터레이터를 직접 만들 때 사용하는 코드

- 이터레이터를 생성하는 함수

- 제너레이터는 함수의 실행 중에 값을 생성하고 메모리에 저장하지 않으며, 필요할 때마다 값을 생성

- 제너레이터는 한 번에 모든 값을 메모리에 저장하지 않기 때문에 대량의 데이터를 처리할 때 효율적이며, 루프나 반복문에서 사용할 때 특히 유용