파이썬 map() 함수
파이썬의 내장 함수 중 하나로, 주어진 함수를 순회 가능한(iterable) 객체의 각 요소에 적용하여 새로운 iterable을 생성하는 함수이다. map 함수는 함수형 프로그래밍의 개념 중 하나로, 요소별 변환을 간단하게 수행할 수 있게 도와준다.
파이썬 map() 함수의 사용 목적
map() 함수의 사용 목적은 주로 다음과 같은 목적으로 사용된다.
- 순회 가능한 객체의 모든 요소에 동일한 함수를 적용하여 새로운 iterable을 생성한다.
- 요소 간 변환이 필요한 경우, 코드를 간결하게 유지하면서 반복적인 작업을 수행한다.
- 루프를 사용하지 않고, 요소 간 일관된 연산을 수행할 수 있다.
파이썬 map() 함수 사용 예제
지금부터는 다양한 예제를 통해 map() 함수를 어떻게 사용하는지 살펴보자.
map() 함수의 기본 구조
map(function, iterable)
위의 예제에서 첫 번째 파라미터로 들어가는 function은 각 요소에 적용할 함수를 지정하기 위함이고 두 번째 파라미터인 iterable은 함수를 적용할 순회 가능한 객체(리스트, 튜플, 문자열 등)를 지정한다.
리스트 요소의 제곱
numbers = [1, 2, 3, 4, 5]
squared = map(lambda x: x**2, numbers)
squared_list = list(squared)
print(squared_list)
[1, 4, 9, 16, 25]
map() 함수에서 람다를 사용하여 numbers 리스트의 각 요소를 제곱하여 새로운 리스트를 생성한다.
문자열 길이 계산
words = ["apple", "banana", "cherry"]
word_lengths = map(len, words)
word_lengths_list = list(word_lengths)
print(word_lengths_list)
[5, 6, 6]
map() 함수를 사용하여 각 단어의 길이를 계산하여 새로운 리스트를 생성한다.
대문자 변환
text = ["hello", "world"]
uppercase = map(str.upper, text)
uppercase_list = list(uppercase)
print(uppercase_list)
['HELLO', 'WORLD']
map() 함수를 사용하여 각 문자열을 대문자로 변환하여 새로운 리스트를 생성한다.
두 리스트 합 구하기
numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]
sum_list = map(lambda x, y: x + y, numbers1, numbers2)
sum_list = list(sum_list)
print(sum_list)
[5, 7, 9]
map() 함수에 두 개의 iterable을 전달하면, 람다 함수는 각 iterable에서 동일한 위치에 있는 요소들을 인수로 받아 실행된다. 따라서 위의 코드에서 람다 함수에는 x와 y 두 개의 인수가 필요하며, map() 함수는 numbers1 및 numbers2의 각 요소를 한 쌍씩 가져와 람다 함수에 전달한다. 만약 람다 함수에서 x와 y와 같이 두 개의 매개변수를 정의하고, map() 함수에 하나의 iterable만을 전달하게 될 경우 오류가 발생한다는 점을 기억하자.
리스트 안에 요소 형변환
map 함수를 사용하여 리스트 안에 있는 요소를 다른 데이터형으로 형변환 할 수 도 있다. 예를 들어, 정수형 리스트를 문자열로 변환하려면 map 함수를 호출하고 변환 함수를 사용하면 된다.
# 정수형 리스트
integer_list = [1, 2, 3, 4, 5]
# map 함수를 사용하여 리스트의 각 요소를 문자열로 변환
string_list = list(map(str, integer_list))
# 결과 출력
print(string_list) # ['1', '2', '3', '4', '5']
하지만 map 함수를 이용하여 형변환을 할 때 주의할 점은 리스트 안에 있는 요소가 변환하려고 하는 데이터형으로 형변환이 불가능한 요소가 1개라도 있으면 안된다. 예를 들어 문자열 리스트를 정수형 리스트로 형변환 하려고 할 때 리스트 안에 'a'와 같이 숫자로 형변환 할 수 없는 요소가 1개라도 있다면 에러를 발생시킨다.
# 정수형 리스트
integer_list = ['1', '2', 'a', '4', '5']
# 변환 함수 (int를 str로 변환)
def int_to_str(num):
return str(num)
# map 함수를 사용하여 리스트의 각 요소를 문자열로 변환
string_list = list(map(int, integer_list))
# 결과 출력
print(string_list) # ValueError 발생
'a'는 숫자형으로 형변환 될 수 없으므로 에러가 발생하는걸 확인할 수 있다.
읽어주셔서 감사합니다.