[Python TIL] map() 완전 이해하기: 여러 값 입력받기와 숫자 변환
✅ 기본 입력 방법
arr = input().split()
📌 사용자가 10 20 30을 입력하면 arr = ['10', '20', '30']
→ 이때 각 요소는 문자열(str) 이다.
✅ 숫자로 변환하려면?
a, b, c = map(int, input().split())
📌 사용자가 1 2 3을 입력하면 → a = 1, b = 2, c = 3
→ 각각 int형으로 변환되어 저장된다.
🔍 map()의 동작 원리
map(함수, 반복가능한 객체)
📌 핵심 기능
반복 가능한 객체(예: 리스트, 튜플, 문자열)의 각 요소에 지정한 함수를 자동으로 적용해주는 함수
map(int, ['1', '2', '3']) # => 각 요소에 int() 함수가 적용됨
💡 내부 작동 흐름
# 실제로는 이런 작동을 한다고 생각하면 됨
result = []
for item in ['1', '2', '3']:
result.append(int(item))
⛳ 결과
map 객체 → <map object at 0x...>
list(map(int, ['1', '2', '3'])) → [1, 2, 3]
즉, map()은 반복 가능한 객체의 각 요소에 지정된 함수를 적용한 결과를 반환한다.
그 결과는 map 객체(이터러블) 이므로 list()로 감싸면 리스트로 확인할 수 있다.
✅ 실전 예제
# 사용자 입력: 5 10 15
numbers = list(map(int, input("숫자 3개를 입력하세요: ").split()))
print(numbers)
📌 출력 결과:
숫자 3개를 입력하세요: 5 10 15
[5, 10, 15]
✅ 튜플로 받기 (언팩 가능)
x, y = map(float, input("실수 2개 입력: ").split())
print(x, y)
입력:
3.14 2.71
결과:
3.14 2.71
🚫 주의할 점
map()을 사용하면 각 요소에 함수가 적용되지만, 리스트처럼 바로 보이지 않는다.출력하거나 리스트로 활용하려면
list()나 언팩킹이 필요하다.split()과 함께 쓰는 경우, 입력값의 개수와 언팩할 변수의 개수가 다르면 에러가 발생한다!📌 잘못된 사용 예 ①: 입력값이 부족한 경우
a, b, c = input("세 개의 값을 입력하세요: ").split()🙋 사용자 입력:
10 20❌ 결과:
ValueError: not enough values to unpack (expected 3, got 2)💥 원인:
split()결과가 2개인데 변수는 3개라서 에러 발생
📌 잘못된 사용 예 ②: 입력값이 많은 경우
x, y = input("두 개의 값을 입력하세요: ").split()🙋 사용자 입력:
1 2 3❌ 결과:
ValueError: too many values to unpack (expected 2)💥 원인:
split()결과가 3개인데 변수는 2개 → 어디에 넣어야 할지 몰라서 에러 발생
✅ 안전하게 쓰는 팁
✔ 방법 1: 입력 개수를 정확히 맞추도록 유도
a, b, c = input("공백으로 구분된 세 숫자를 입력하세요: ").split()→ 사용자에게 입력 형식을 명확히 안내해주자!
✔ 방법 2: 리스트로 받아서 길이 체크 후 분기처리
data = input("숫자를 여러 개 입력하세요: ").split() if len(data) == 3: a, b, c = data print(a, b, c) else: print("입력 개수가 정확히 3개여야 합니다.")
✔ 방법 3: 변수 하나에 리스트로 받기 (언팩 안 함)
nums = input("숫자 여러 개 입력: ").split() print("입력값:", nums)→ 리스트로 받아두고, 필요한 만큼 꺼내 쓰는 방식
🧠 요약
| 구문 | 설명 |
input().split() | 입력값을 문자열로 잘라 리스트로 만듦 |
map(int, input().split()) | 문자열 리스트의 모든 요소를 정수로 변환 |
list(map(int, ...)) | 변환 결과를 리스트로 저장 |
a, b, c = map(int, input().split()) | 정수 3개를 각각 변수에 언팩 |
🧠 Python map() 고급 활용법 총정리
✨ 고급 활용 1: lambda와 함께 쓰기
lambda는 이름 없는 간단한 함수를 만들 때 사용한다.map()과 함께 쓰면 짧고 깔끔한 코드가 가능하다.
📌 예제 1: 입력값을 제곱하기
numbers = list(map(lambda x: x ** 2, [1, 2, 3, 4]))
print(numbers) # [1, 4, 9, 16]
💡 lambda x: x ** 2는 x를 받아 제곱해서 반환하는 익명 함수
📌 예제 2: 문자열 길이 구하기
words = ["apple", "banana", "kiwi"]
lengths = list(map(lambda w: len(w), words))
print(lengths) # [5, 6, 4]
📌 예제 3: 정수 리스트를 문자열로 변환
nums = [1, 2, 3]
str_nums = list(map(lambda x: str(x), nums))
print(str_nums) # ['1', '2', '3']
✨ 고급 활용 2: 사용자 정의 함수와 함께 사용하기
📌 예제 1: 짝수면 "even", 홀수면 "odd" 출력
def check_even(n):
return "even" if n % 2 == 0 else "odd"
nums = [1, 2, 3, 4, 5]
result = list(map(check_even, nums))
print(result) # ['odd', 'even', 'odd', 'even', 'odd']
✨ 고급 활용 3: 여러 리스트에 map 적용하기
map()은 여러 개의 iterable도 동시에 받아서 사용할 수 있다.
(이때 함수는 그만큼 인자를 받아야 한다.)
📌 예제: 두 리스트의 요소를 더하기
a = [1, 2, 3]
b = [4, 5, 6]
result = list(map(lambda x, y: x + y, a, b))
print(result) # [5, 7, 9]
✨ 고급 활용 4: 다양한 내장 함수와 함께 사용하기
| 내장 함수 | 설명 | 예시 결과 |
int | 문자열을 정수로 변환 | map(int, ['1', '2']) → [1, 2] |
float | 문자열을 실수로 변환 | map(float, ['3.1', '4.5']) → [3.1, 4.5] |
str | 숫자를 문자열로 변환 | map(str, [1, 2, 3]) → ['1', '2', '3'] |
len | 각 요소의 길이 반환 | map(len, ['a', 'ab']) → [1, 2] |
round | 반올림 | map(round, [1.23, 4.56]) → [1, 5] |
✅ map vs list comprehension
| 구문 | 예시 |
map() | list(map(int, input().split())) |
| 리스트 컴프리헨션 | [int(x) for x in input().split()] |
💡 기능은 유사하지만 map()은 함수 중심, 컴프리헨션은 표현식 중심이다.
속도는 map()이 빠르고, 가독성은 경우에 따라 다름.
🧠 정리 요약
| 활용법 | 예시 | 설명 |
| 기본 변환 | map(int, input().split()) | 입력값을 정수로 변환 |
| lambda 사용 | map(lambda x: x**2, list) | 짧은 함수 직접 작성 가능 |
| 사용자 정의 함수 | map(my_func, list) | 복잡한 로직 적용 가능 |
| 다중 iterable | map(lambda x,y: x+y, list1, list2) | 두 리스트 병렬 처리 |
| 다양한 내장 함수 | map(float, list) 등 | int, float, str, round 등과 함께 사용 |