Skip to main content

Command Palette

Search for a command to run...

[Python TIL] map() 완전 이해하기: 여러 값 입력받기와 숫자 변환

Published
•5 min read•View as Markdown
K

I'm currently learning Python and studying RAG (Retrieval-Augmented Generation).

✅ 기본 입력 방법

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)복잡한 로직 적용 가능
다중 iterablemap(lambda x,y: x+y, list1, list2)두 리스트 병렬 처리
다양한 내장 함수map(float, list) 등int, float, str, round 등과 함께 사용

More from this blog

[Python 자료구조] Binary Tree(이진 트리) 개념과 배열

자료구조 중에서도 가장 자주 등장하고, 가장 중요한 트리 중 하나가 바로 이진트리(Binary Tree)이다.만약 자료구조 공부를 처음 시작했다면, 이진트리는 꼭 제대로 이해하고 넘어가야 할 핵심 개념이다. 그렇다면 이진트리는 도대체 어떤 구조이며, 왜 이렇게 중요할까? 🌳 이진트리란? 이진트리(Binary Tree)는 이름 그대로 자식 노드를 최대 두 개까지만 가질 수 있는 트리를 의미한다.자식 노드가 1개거나 0개일 수도 있지만, 최대...

Apr 8, 20253 min read

[Python 자료구조] Tree(트리) 구조

회사 조직도, 가계도, 또는 어떤 계층적인 구조를 표현할 때 자주 등장하는 그림이 있다. 바로 '트리 구조'이다. 그런데 이 구조를 처음 보면, "도대체 어디가 나무야?" 라고 생각할 수 있다. 하지만 나무를 거꾸로(180도 돌려서) 생각해보면 이해가 쉽다. 위쪽에 커다란 줄기(기둥)가 있고, 아래로 가지가 퍼져 나가는 모습과 아주 흡사하기 때문이다. 그래서 우리는 이런 구조를 트리(Tree) 구조라고 부른다. 🧩 트리(Tree)란 무엇인가...

Apr 8, 20253 min read

[Python 자료구조] Stack(스택)

스택 정의, 값 넣기/빼기 프로그래밍을 처음 접할 때 나오는 대표적인 자료구조 중 하나가 바로 스택(Stack) 이다. 이름만 들으면 어렵게 느껴질 수 있지만, 실제로는 우리 일상에서도 쉽게 찾아볼 수 있는 개념이다. 예를 들어 젠가(Jenga) 게임을 떠올려보자. 스택이란? 젠가로 이해하는 Stack의 원리 젠가 블럭을 하나씩 통에 넣고 꺼내는 상황을 상상해보자. 가장 최근에 넣은 블럭은 통의 가장 위에 쌓이게 된다. 그리고 꺼내고자 할 때...

Apr 7, 20253 min read

[Sql] 제약 조건과 무결성

SQL을 공부하다 보면 반드시 만나게 되는 용어들이 있다. 바로 기본키, 외래키, 무결성 제약 조건 같은 개념이다. 이 글에서는 이 용어들을 단순히 암기하는 게 아니라, 예시를 통해 자연스럽게 이해할 수 있도록 정리해보았다. 🎯 제약 조건이란? 제약 조건(Constraint)은 데이터베이스에 저장되는 데이터의 정확성과 신뢰성을 보장하기 위해 설정하는 규칙이다. ✅ 한 줄에 하나씩만 작성해야 하며, 테이블 생성 시 컬럼 옆에 정의하거나 AL...

Apr 7, 20253 min read

[Python TIL] Python에서 False와 True로 평가되는 값들

파이썬에서는 if 조건문이나 while 같은 컨트롤 흐름에서 자동으로 False로 간주되는 값들이 있다. 이걸 "Falsy 값" 또는 "Falsy Object" 라고 부른다. 이걸 알아두면 코드를 훨씬 깔끔하게 쓸 수 있다. 예를 들어, if not my_list: 같은 표현이 빈 리스트를 체크하는 데 쓰이기도 하기 때문이다. ⚠️ 파이썬에서 False로 평가되는 값들 (Falsy 값) 유형예시설명 숫자형0, 0.0, 0j정수, ...

Apr 6, 20252 min read

Code Compass

75 posts