Python

[Python] 한 줄에 여러 개 입력받기(map, split)

기억에 남는 블로그 닉네임 2024. 5. 17. 12:32

한 줄에 여러 개 입력받기

Python 문제를 해결하다 보면, 한 줄에 여러 개의 입력을 받아야 하는 경우가 생긴다. 그러나 Python은 개행('\n')을 하나의 입력으로 인식하기 때문에 '5 4 1 3 2', '7 3'과 같이 인식한다. 이때, map 함수와 split 함수를 활용하면 각각의 정수로 분리하여 여러 개의 변수에 저장할 수 있다.

한 줄에 여러 개 입력받기

한 줄에 여러 개 입력을 받는 형태를 살펴본 후에 map과 split 함수에 대해 알아본다. 관련 자료를 찾다가 사용 예시가 있어서 가져왔다.

# 1. 값 두 개를 입력받아 변수 a와 b에 저장 (띄어쓰기 구분)
a, b = input().split() # 문자열
a, b = map(int, input().split()) # 정수형
a, b = map(float, input().split()) # 실수형

# 2. 1차원 배열 입력받기 = 정수형 리스트로 저장
num_list = list(map(int, input().split())) # 입력 : 1 2 3 /출력 : [1, 2, 3] 

# 3. 문자열 여러줄 입력받기 
s_list = [input() for _ in range(n)] # 예시로 n에 3넣어 3줄 입력받기(엔터로 구분)

# 4. 한 문자열(숫자ex.12345) 받아서 한 글자씩 나누어 더하기
s = input()
for i in range(len(s)):
    sum += int(s[i])  # 문자열은 슬라이싱 가능!! + 문자열 형변환

# 5. 띄어쓰기 없이 정수 여러개 입력받아 2차원 배열로 저장하기 
two_d = [list(map(int, input())) for _ in range(n)] # 예시는 4줄 입력받음

# 6. 열은 띄어쓰기로 행은 엔터로 구분하여 입력받아 2차원 배열 저장하기
t_d = [list(map(int, input().split())) for _ in range(n)] # 예시는 4줄. 4.-와 결과는 같다.

map 함수

개념

map 함수는 iterable의 각 요소에 대해 function 함수를 적용한 결과를 새로운 iterator로 반환한다.

  • iterable(반복 가능한 자료형) : 리스트, 튜플 등
map(function, iterable)

사용 (1) - square

다음은 square 함수와 numbers 리스트를 map 함수에 적용하는 예제이다.

def square(x):
    return x**2

numbers = [1, 2, 3, 4, 5]
squared_numbers = map(square, numbers)
print(list(squared_numbers))

#result
>> [1, 4, 9, 16, 25]

사용 (2) - add

다음은 add 함수와 numbers 리스트를 map 함수에 적용하는 예제이다. 이번 예제처럼 함수의 매개 변수 개수에 따라  iterable을 여러 개 넣어줄 수도 있다.

def add(x, y):
    return x + y

numbers1 = [1, 2, 3, 4, 5]
numbers2 = [10, 20, 30, 40, 50]
added_numbers = map(add, numbers1, numbers2)
print(list(added_numbers))  # [11, 22, 33, 44, 55]

split 함수

개념

문자열을 일정한 규칙으로 잘라 리스트로 만들어주는 함수이다.

  • 구분자(default = ' ') : 문자열을 자르는 기준
  • 분할 횟수(default = -1) : 앞에서부터 구분자로 문자열을 자르는 횟수
문자열.split()
문자열.split('구분자')
문자열.split('구분자', 분할횟수)
문자열.split(sep='구분자', maxsplit=분할횟수)

사용 (1) - 기본 형태

string1 = '1 2 3 4 5 6 7 8 9 0'
print(string1.split())

#result
>> ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']

사용 (2) - 구분자, 분할횟수 지정

string1 = '1 2 3 4 5 6 7 8 9 0'
print(string1.split(' ', 3))

# result
>> ['1', '2', '3', '4 5 6 7 8 9 0']

Reference

https://dotiromoook.tistory.com/28

https://happyeuni.tistory.com/18