map

map() 함수는 파이썬에서 반복 가능한 객체의 모든 요소에 대해 지정된 함수를 적용하는 함수. 원본 데이터를 변형하여 새로운 데이터를 생산하는 데 사용. 이 함수는 lazy evaluation을 사용하여 결과를 바로 계산하지 않고 필요할 때만 값을 계산하는 특성을 지니고 있다.

구문

map(function, iterable, ...)

동작 원리

map 함수는 반복 가능한 객체의 각 요소를 순서대로 함수에 전달하고, 그 결과를 돌려주는 이터레이터를 반환.

예시1: 단일 반복 객체 사용

def square(x):
    return x**2

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

result = map(square, nums)

print(list(result))

# 출력: [1, 4, 9, 16, 25]

예시2: 람다 함수 사용

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

result = map(lambda x: x**2, nums)

print(list(result))

# 출력: [1, 4, 9, 16, 25]

예시3: 여러 반복 객체 사용

def add(x, y):
    return x+y

list1 = [1, 2, 3]
list2 = [4, 5, 6]

print(list(map(add, list1, list2)))

# 출력: [5, 7, 9]

예시4: 중첩된 리스트 반환

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 각 행에 대해 map을 사용해 제곱 처리
result = map(lambda row: list(map(lambda x: x ** 2, row)), matrix)

print(list(result))

# 출력: [[1, 4, 9], [16, 25, 36], [49, 64, 81]]

예시5: 조건에 따른 반환

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

result = map(lambda x: x**2 if x % 2 == 0 else x, nums)

print(list(result))

# 출력: [1, 4, 3, 16, 5, 36]

예시6: 복잡한 객체 반환

people = [
    {'name': 'Alice', 'age': 25},
    {'name': 'Bob', 'age': 30},
    {'name': 'Charlie', 'age': 35}
]

# 나이 값을 1씩 증가시키는 map
result = map(lambda person: {**person, 'age': person['age'] + 1}, people)

print(list(result))

# 출력: [{'name': 'Alice', 'age': 26}, {'name': 'Bob', 'age': 31}, {'name': 'Charlie', 'age': 36}]

장점

  • code readability improvement
  • memory efficiency improvement