python

Python map() 사용법

bitandwon 2026. 7. 20. 13:16

Python map() 함수란?

map()은 리스트, 튜플과 같은 반복 가능한 데이터의 각 요소에 동일한 함수를 적용하는 Python 내장 함수입니다. 여러 데이터를 하나씩 꺼내 처리해야 할 때 반복문을 직접 작성하지 않고도 간결하게 변환할 수 있습니다.

예를 들어 숫자 리스트의 모든 값을 두 배로 만들거나, 문자열 리스트를 정수로 변환하거나, 상품 가격에 할인율을 적용하는 작업에 활용할 수 있습니다.

다만 map()은 결과를 리스트로 바로 반환하지 않고 map 객체를 반환합니다. 결과를 확인하려면 보통 list()나 tuple()로 변환해야 합니다.

 

map() 기본 문법

map()의 기본 문법은 다음과 같습니다.

map(함수, 반복_가능한_객체)
구성 요소 설명
함수 각 요소에 적용할 함수
반복 가능한 객체 리스트, 튜플, 문자열 등
반환값 map 객체

가장 간단한 예제로 숫자 리스트의 각 값을 두 배로 만들어 보겠습니다.

numbers = [1, 2, 3, 4, 5] result = map(lambda x: x * 2, numbers) print(result) print(list(result))

실행 결과

<map object at 0x...> [2, 4, 6, 8, 10]

map()의 결과는 바로 리스트가 아니므로 list(result)처럼 변환해야 실제 값을 확인할 수 있습니다.

일반 함수와 map() 함께 사용하기

map()에는 lambda 함수뿐만 아니라 def로 정의한 일반 함수도 전달할 수 있습니다.

def square(number): return number ** 2 numbers = [1, 2, 3, 4, 5] result = map(square, numbers) print(list(result))

실행 결과

[1, 4, 9, 16, 25]

함수 이름을 전달할 때는 괄호를 붙이지 않습니다. map(square(), numbers)가 아니라 map(square, numbers)로 작성해야 합니다.

작성 방식 의미 올바른 사용
square 함수 자체를 전달 가능
square() 함수를 즉시 실행 map 인자로 부적절

lambda 함수와 map() 사용하기

간단한 변환 작업에서는 별도의 함수를 만들기보다 lambda 함수를 함께 사용하는 경우가 많습니다.

numbers = [10, 20, 30, 40] result = map(lambda number: number + 5, numbers) print(list(result))

실행 결과

[15, 25, 35, 45]

lambda 함수는 다음 형식으로 작성합니다.

lambda 매개변수: 반환할_표현식

다만 lambda 안의 로직이 길어지거나 복잡해진다면 def 함수로 분리하는 편이 읽기 쉽습니다.

문자열을 숫자로 변환하기

실무에서 map()이 자주 사용되는 대표적인 상황은 문자열 숫자 목록을 실제 숫자로 변환하는 작업입니다.

values = ["10", "20", "30", "40"] numbers = list(map(int, values)) print(numbers) print(type(numbers[0]))

실행 결과

[10, 20, 30, 40] <class 'int'>

int도 하나의 함수이므로 map()의 첫 번째 인자로 바로 전달할 수 있습니다.

변환 목적 작성 예시 결과
문자열을 정수로 변환 map(int, values) int 값
문자열을 실수로 변환 map(float, values) float 값
숫자를 문자열로 변환 map(str, numbers) str 값

input()과 map() 함께 사용하기

알고리즘 문제나 콘솔 프로그램에서는 한 줄에 입력된 여러 숫자를 처리할 때 input(), split(), map()을 함께 사용합니다.

numbers = list(map(int, input("숫자를 입력하세요: ").split())) print(numbers) print(sum(numbers))

입력 예시

10 20 30 40

실행 결과

[10, 20, 30, 40] 100

위 코드는 다음 순서로 동작합니다.

  1. input()으로 한 줄을 문자열로 입력받습니다.
  2. split()으로 공백을 기준으로 문자열을 나눕니다.
  3. map(int, ...)로 각각을 정수로 변환합니다.
  4. list()로 결과를 리스트로 만듭니다.

 

여러 개의 반복 객체 처리하기

map()에는 하나가 아니라 여러 개의 반복 가능한 객체를 전달할 수도 있습니다. 이 경우 함수도 전달된 객체 수만큼 매개변수를 받아야 합니다.

numbers1 = [1, 2, 3] numbers2 = [10, 20, 30] result = map(lambda x, y: x + y, numbers1, numbers2) print(list(result))

실행 결과

[11, 22, 33]

각 리스트에서 같은 위치의 요소를 하나씩 꺼내 함수에 전달합니다.

prices = [10000, 20000, 30000] discounts = [0.1, 0.2, 0.15] discounted_prices = map( lambda price, rate: int(price * (1 - rate)), prices, discounts ) print(list(discounted_prices))

실행 결과

[9000, 16000, 25500]

주의할 점은 길이가 다른 객체를 전달하면 가장 짧은 객체를 기준으로 처리가 종료된다는 것입니다.

first = [1, 2, 3, 4] second = [10, 20] result = map(lambda x, y: x + y, first, second) print(list(result))

실행 결과

[11, 22]

map 객체의 특징

Python 3에서 map()은 필요한 값을 한 번에 모두 생성하지 않고, 실제로 값이 필요할 때 하나씩 계산하는 지연 평가 방식을 사용합니다.

특징 설명
반환 형식 map 객체
계산 시점 값이 필요한 시점
메모리 사용 큰 데이터를 처리할 때 유리할 수 있음
재사용 한 번 소비하면 다시 사용할 수 없음
numbers = [1, 2, 3] result = map(lambda x: x * 10, numbers) print(list(result)) print(list(result))

실행 결과

[10, 20, 30] []

첫 번째 list(result)에서 map 객체의 모든 요소를 소비했기 때문에 두 번째 결과는 빈 리스트가 됩니다.

결과를 여러 번 사용해야 한다면 처음부터 리스트로 변환해 변수에 저장하는 것이 안전합니다.

numbers = [1, 2, 3] result = list(map(lambda x: x * 10, numbers)) print(result) print(result)

실행 결과

[10, 20, 30] [10, 20, 30]

map()과 리스트 컴프리헨션 비교

map()과 리스트 컴프리헨션은 모두 반복 데이터의 각 요소를 변환할 수 있습니다.

numbers = [1, 2, 3, 4] # map 사용 result1 = list(map(lambda x: x * 2, numbers)) # 리스트 컴프리헨션 사용 result2 = [x * 2 for x in numbers] print(result1) print(result2)

실행 결과

[2, 4, 6, 8] [2, 4, 6, 8]
항목 map() 리스트 컴프리헨션
코드 형태 함수를 인자로 전달 표현식을 직접 작성
반환값 map 객체 리스트
기존 함수 활용 편리함 상대적으로 장황할 수 있음
단순 표현식 lambda가 필요할 수 있음 읽기 쉬운 경우가 많음
대용량 처리 지연 평가 가능 리스트를 즉시 생성

이미 정의된 함수를 각 요소에 적용할 때는 map()이 자연스럽습니다. 반면 간단한 연산을 직접 표현할 때는 리스트 컴프리헨션이 더 읽기 쉬운 경우가 많습니다.

map()과 filter()의 차이

map()과 filter()는 함께 자주 언급되지만 역할은 다릅니다.

함수 목적 예시
map() 모든 요소를 변환 각 숫자를 두 배로 변경
filter() 조건에 맞는 요소만 선택 짝수만 추출
numbers = [1, 2, 3, 4, 5] mapped = list(map(lambda x: x * 2, numbers)) filtered = list(filter(lambda x: x % 2 == 0, numbers)) print(mapped) print(filtered)

실행 결과

[2, 4, 6, 8, 10] [2, 4]

map()은 원칙적으로 각 입력 요소에 대해 하나의 결과를 만듭니다. filter()는 조건에 따라 일부 요소를 제외합니다.

조건식을 map()에 적용하기

lambda의 조건 표현식을 활용하면 각 요소를 조건에 따라 다른 값으로 변환할 수 있습니다.

scores = [45, 80, 67, 30, 95] results = list( map(lambda score: "합격" if score >= 60 else "불합격", scores) ) print(results)

실행 결과

['불합격', '합격', '합격', '불합격', '합격']

조건이 복잡해지면 lambda 안에 모두 작성하지 말고 일반 함수로 분리하는 것이 좋습니다.

def classify_score(score): if score >= 90: return "A" if score >= 80: return "B" if score >= 70: return "C" return "D" scores = [95, 82, 73, 60] grades = list(map(classify_score, scores)) print(grades)

실행 결과

['A', 'B', 'C', 'D']

딕셔너리 리스트 변환하기

실제 프로젝트에서는 딕셔너리로 구성된 데이터를 가공할 때 map()을 활용할 수 있습니다.

products = [ {"name": "키보드", "price": 50000}, {"name": "마우스", "price": 30000}, {"name": "모니터", "price": 250000} ] names = list(map(lambda product: product["name"], products)) print(names)

실행 결과

['키보드', '마우스', '모니터']

상품 가격에 부가세를 포함한 새 딕셔너리를 만들 수도 있습니다.

products = [ {"name": "키보드", "price": 50000}, {"name": "마우스", "price": 30000} ] result = list( map( lambda product: { "name": product["name"], "price": product["price"], "price_with_tax": int(product["price"] * 1.1) }, products ) ) print(result)

실행 결과

[ {'name': '키보드', 'price': 50000, 'price_with_tax': 55000}, {'name': '마우스', 'price': 30000, 'price_with_tax': 33000} ]

문자열 데이터 정리하기

사용자 이름이나 CSV 데이터처럼 불필요한 공백과 대소문자가 섞인 문자열을 정리할 때도 유용합니다.

names = [" KIM ", " lee", "PARK "] cleaned_names = list( map(lambda name: name.strip().title(), names) ) print(cleaned_names)

실행 결과

['Kim', 'Lee', 'Park']

다만 문자열 메서드 하나만 적용할 때는 lambda 없이 메서드 자체를 전달할 수도 있습니다.

words = ["python", "java", "javascript"] result = list(map(str.upper, words)) print(result)

실행 결과

['PYTHON', 'JAVA', 'JAVASCRIPT']

실무 활용 예제: 상품 가격 할인 처리

쇼핑몰 상품 목록에 할인율을 적용하는 예제를 살펴보겠습니다.

products = [ {"name": "노트북", "price": 1200000}, {"name": "키보드", "price": 80000}, {"name": "마우스", "price": 50000} ] discount_rate = 0.1 def apply_discount(product): discounted_price = int(product["price"] * (1 - discount_rate)) return { "name": product["name"], "original_price": product["price"], "discounted_price": discounted_price } discounted_products = list(map(apply_discount, products)) for product in discounted_products: print(product)

실행 결과

{'name': '노트북', 'original_price': 1200000, 'discounted_price': 1080000} {'name': '키보드', 'original_price': 80000, 'discounted_price': 72000} {'name': '마우스', 'original_price': 50000, 'discounted_price': 45000}

실무에서는 원본 데이터를 직접 수정하기보다 새로운 데이터를 반환하도록 작성하면 부작용을 줄이고 테스트하기 쉬워집니다.

 

map() 사용 중 발생하는 대표적인 오류

함수 호출 결과를 전달하는 실수

def double(number): return number * 2 numbers = [1, 2, 3] # 잘못된 코드 result = map(double(), numbers)

double()은 인자가 필요하므로 오류가 발생합니다. 함수 자체를 전달해야 합니다.

result = map(double, numbers) print(list(result))

실행 결과

[2, 4, 6]

문자열 숫자에 소수점이 포함된 경우

values = ["10", "20.5", "30"] result = list(map(int, values))

int("20.5")는 바로 변환할 수 없으므로 ValueError가 발생합니다.

values = ["10", "20.5", "30"] result = list(map(lambda value: int(float(value)), values)) print(result)

실행 결과

[10, 20, 30]

None 값이 포함된 경우

values = ["10", None, "30"] result = list(map(int, values))

int(None)은 허용되지 않으므로 사전에 처리해야 합니다.

values = ["10", None, "30"] result = list( map(lambda value: int(value) if value is not None else 0, values) ) print(result)

실행 결과

[10, 0, 30]

초보자가 자주 하는 실수

  • map()이 리스트를 반환한다고 생각하는 경우
  • 함수 이름 대신 함수 실행 결과를 전달하는 경우
  • map 객체를 한 번 소비한 뒤 다시 사용하려는 경우
  • 길이가 다른 여러 리스트를 전달해도 모든 요소가 처리된다고 생각하는 경우
  • 복잡한 lambda를 작성해 코드의 가독성을 떨어뜨리는 경우
  • 문자열을 숫자로 변환할 때 잘못된 형식으로 인해 발생하는 오류를 처리하지 않는 경우

map() 사용 시 권장 방법

  • 기존 함수를 여러 요소에 적용할 때 map()을 활용합니다.
  • 결과를 여러 번 사용할 예정이라면 즉시 리스트로 변환합니다.
  • 간단한 변환은 lambda를 사용하되 복잡한 로직은 일반 함수로 분리합니다.
  • 단순한 표현식은 리스트 컴프리헨션과 비교해 더 읽기 쉬운 방식을 선택합니다.
  • 외부 데이터는 변환 전에 None, 빈 문자열, 잘못된 숫자 형식을 확인합니다.
  • 함수 안에서 원본 객체를 직접 수정하기보다 새로운 객체를 반환하는 방식을 고려합니다.

실무 팁: 짧다는 이유만으로 무조건 map과 lambda를 조합하지 마세요. 팀원이 코드를 한 번에 이해할 수 있는지가 더 중요합니다.

VS Code에서 map() 예제 실행하기

VS Code에서 간단한 Python 파일을 만들어 map 예제를 실행할 수 있습니다.

  1. VS Code에서 map_example.py 파일을 만듭니다.
  2. Python 확장 프로그램과 인터프리터가 선택되어 있는지 확인합니다.
  3. 아래 코드를 입력합니다.
  4. 터미널에서 python map_example.py를 실행합니다.
def normalize_name(name): return name.strip().title() users = [" kim", "LEE ", " park "] normalized_users = list(map(normalize_name, users)) print(normalized_users)

실행 결과

['Kim', 'Lee', 'Park']

GitHub 협업 시 주의할 점

map을 사용하는 코드도 다른 Python 코드와 마찬가지로 가독성과 테스트 가능성을 고려해야 합니다.

  • 복잡한 lambda는 이름이 있는 함수로 분리합니다.
  • 변환 함수에 부작용이 없도록 작성합니다.
  • 입력 데이터에 빈 값이나 잘못된 값이 포함된 경우를 테스트합니다.
  • 팀의 코드 스타일에 따라 map 또는 리스트 컴프리헨션 사용 기준을 통일합니다.
  • 함수의 입력값과 반환값에 타입 힌트를 추가하면 유지보수가 쉬워집니다.
from typing import Iterable def double_numbers(numbers: Iterable[int]) -> list[int]: return list(map(lambda number: number * 2, numbers)) print(double_numbers([1, 2, 3]))

실행 결과

[2, 4, 6]

map() 핵심 정리

항목 핵심 내용
기본 문법 map(함수, 반복 객체)
반환값 map 객체
리스트 변환 list(map(...))
대표 활용 형 변환, 데이터 가공, 문자열 정리
여러 객체 같은 위치의 요소를 함수에 전달
주의사항 한 번 소비한 map 객체는 재사용 불가
대안 리스트 컴프리헨션

마무리

Python map()은 반복 가능한 데이터의 각 요소에 동일한 함수를 적용할 때 사용하는 내장 함수입니다. 숫자 계산, 문자열 정리, 자료형 변환, 딕셔너리 가공 등 다양한 작업을 반복문 없이 표현할 수 있습니다.

다만 단순히 코드를 짧게 만들기 위해 사용하는 것보다, 함수 전달 방식이 자연스럽고 코드의 의미가 명확할 때 사용하는 것이 좋습니다. 간단한 표현식은 리스트 컴프리헨션이 더 읽기 쉬울 수 있으며, 복잡한 변환은 이름이 있는 일반 함수로 분리하는 것이 유지보수에 유리합니다.

map()의 반환값이 map 객체라는 점과 한 번 소비하면 다시 사용할 수 없다는 특징까지 이해하면 실무에서도 안전하게 활용할 수 있습니다.

FAQ

Q1. Python map()은 리스트를 반환하나요?

아니요. Python 3의 map()은 map 객체를 반환합니다. 리스트가 필요하면 list(map(...)) 형태로 변환해야 합니다.

Q2. map()과 for문의 차이는 무엇인가요?

두 방식 모두 반복 데이터의 각 요소를 처리할 수 있습니다. map()은 함수를 각 요소에 적용하는 목적이 명확하고, for문은 조건문이나 여러 단계의 로직을 포함하기 쉽습니다.

Q3. map()과 리스트 컴프리헨션 중 무엇이 더 좋은가요?

기존 함수를 그대로 적용할 때는 map()이 편리합니다. 단순한 표현식을 작성할 때는 리스트 컴프리헨션이 더 읽기 쉬운 경우가 많습니다.

Q4. map()에 여러 리스트를 전달할 수 있나요?

네. 여러 반복 객체를 전달할 수 있습니다. 함수는 전달된 객체 수만큼 매개변수를 받아야 하며, 가장 짧은 반복 객체가 끝나면 처리도 종료됩니다.

Q5. map 객체를 두 번 사용할 수 있나요?

일반적으로 한 번 모두 소비한 map 객체는 다시 사용할 수 없습니다. 여러 번 사용하려면 처음부터 리스트나 튜플로 변환해 저장해야 합니다.

Q6. map() 안에서 조건문을 사용할 수 있나요?

네. lambda 조건 표현식이나 일반 함수를 사용할 수 있습니다. 다만 조건이 복잡하면 일반 함수로 분리하는 것이 좋습니다.

Q7. map()으로 문자열을 정수로 변환할 수 있나요?

네. list(map(int, ["10", "20", "30"]))처럼 작성하면 문자열 숫자를 정수 리스트로 변환할 수 있습니다.

'python' 카테고리의 다른 글

Python zip() 사용법  (0) 2026.07.27
Python filter() 사용법  (1) 2026.07.22
Python lambda 함수  (0) 2026.07.20
Python 자료형 변환(int, float, str)  (0) 2026.07.12
Python None 완벽 이해하기  (0) 2026.07.12