파이썬 map으로 숫자 문자열을 정수 리스트로 바꾸기
파이썬 map으로 숫자 문자열을 정수 리스트로 바꾸기
입력값 "10 20 30"은 숫자처럼 보여도 하나의 문자열입니다. 계산하려면 공백을 기준으로 나눈 뒤 각 조각을 정수로 바꿔야 합니다. split(), map(), list()의 역할을 분리해서 이해해 보겠습니다.
가장 많이 쓰는 한 줄
numbers = list(map(int, input().split()))입력으로 10 20 30을 넣으면 결과는 [10, 20, 30]입니다.
세 단계로 펼쳐 보기
text = "10 20 30"
tokens = text.split()
converted = map(int, tokens)
numbers = list(converted)
print(tokens) # ['10', '20', '30']
print(numbers) # [10, 20, 30]map()은 리스트가 아니라 지연 계산되는 map 객체를 반환합니다. 결과를 여러 번 사용하거나 출력 형태로 보관하려면 list()로 변환합니다.
쉼표로 구분된 문자열
text = "10, 20, 30"
numbers = [int(token.strip()) for token in text.split(",")]
print(numbers)구분자가 쉼표라면 split(",")를 사용하고 각 항목의 공백을 제거합니다. 이 경우 변환 과정이 보이는 리스트 컴프리헨션이 읽기 쉽습니다.
잘못된 입력 처리
text = input("숫자를 공백으로 구분해 입력하세요: ")
try:
numbers = list(map(int, text.split()))
except ValueError:
print("정수가 아닌 값이 포함되어 있습니다.")
else:
print("합계:", sum(numbers))3.5도 int()로 바로 변환할 수 없어 오류가 납니다. 소수를 허용하려면 float를 사용하고, 정수와 소수를 섞어 받을지 요구사항을 먼저 정해야 합니다.
map과 컴프리헨션 선택 기준
int, str.strip처럼 이미 있는 함수를 모든 요소에 적용하면 map()이 간결합니다. 변환과 조건이 함께 있거나 과정에 이름이 필요하면 컴프리헨션 또는 일반 반복문이 명확합니다.
변환 실패한 값까지 알려 주기
전체 입력을 한 번에 map(int, ...)로 바꾸면 어느 토큰이 문제인지 사용자에게 설명하기 어렵습니다. 항목별로 검사하면 잘못된 값을 정확히 표시할 수 있습니다.
numbers = []
for token in input().split():
try:
numbers.append(int(token))
except ValueError:
print(f"정수가 아닌 값: {token}")오류가 있어도 나머지 숫자를 계속 받을지, 입력 전체를 취소할지는 프로그램 목적에 따라 결정합니다.
연습: 중복 제거와 정렬
공백으로 입력한 정수를 변환한 뒤 중복을 제거하고 오름차순으로 출력해 보십시오. sorted(set(numbers))를 사용할 수 있습니다. 원래 입력 순서를 유지한 채 중복만 제거하는 방법도 찾아 두 결과의 차이를 설명해 보세요.
정리
split()은 문자열을 나누고, map(int, ...)는 각 조각을 정수로 바꾸며, list()는 결과를 저장합니다. 실제 입력에는 숫자가 아닌 값이 들어올 수 있으므로 ValueError 처리까지 포함해야 완성된 코드가 됩니다.