[Python] sys.stdin.readline() 제대로 사용하기

조시현·2022년 7월 11일
0

Python

목록 보기
3/8

백준으로 입력 시간으로 인해 시간초과를 자꾸 겪게 되면서
sys.stdin.readline()을 사용하게 되는데
가끔 이 방식때문에 생기는 오류를 정확하게 짚고
다음부터는 확실히 알고 문제를 해결하기 위해서 한번 정리하고 넘어가기로 하였다.

sys.stdin.readline()이란

파이썬 공식문서에 따르면

sys

인터프리터에 의해 사용되거나 유지되는 일부 변수와 인터프리터와 강하게 상호작용하는 함수에 대한 엑세스를 제공합니다.

stdin

모든 대화식 입력에 사용됩니다.

readline()

readline 모듈은 파이썬 인터프리터에서 완성과 히스토리 파일의 읽기/쓰기 를 용이하게 하는 여러함수를 정의합니다.

결국 파이썬에서 읽기 쓰기를 용이하게 해주는 모듈이다

사용법

sys.stdin.readline()은 한 줄 단위로 입력을 받기 떄문에, 개행문자가 항상 같이 입력 받아집니다.

만약 1을 입력했다면 1/n이 저장된다.

정수를 받을 때

다양한 예시를 통해서 보여주겠다

import sys
a = int(sys.stdin.readline())

a1,a2,a3 = map(int,sys.stdin.readline().split())

data = list(map(int,sys.stdin.readline().split()))

> 1 2 3 4

print(data)

>[1,2,3,4]

문자열 n줄을 입력 받아 리스트에 저장할 때

내가 sys.stdin.readline()을 사용하면서 가장 많은 에러를 발생하였던 장소로
이유를 모르고 input()으로 고치거나 갑자기 되네?? 가 가장 많았던 오류였다.

import sys
cnt = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(cnt)]

print(data)

> 2
> data1
> data2

>>['data1', 'data2']

여기서 중요한 것은 strip()을 통해서 문자열 맨 앞과 맨 끝의 공백문자를 제거하는 것이다.

strip()을 통해서 개행문자를 제거하지 않으면

> 2
> data1
> data2

>>['data1\n', 'data2\n']

이렇게 나올 것이다.

출처

https://velog.io/@ecvheo1/%EC%9E%85%EB%A0%A5-%EB%B0%9B%EB%8A%94-%EB%B0%A9%EB%B2%95-sys.stdin.readline

https://velog.io/@yeseolee/Python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%A0%A5-%EC%A0%95%EB%A6%ACsys.stdin.readline

profile
끈기있게 답을 찾아나갑니다! 😀

0개의 댓글