Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 데이터분석
- 알고리즘
- 파이썬
- 파인튜닝
- 프로그래머스
- 판다스
- paper review
- Fine-Tuning
- Scaling Laws
- bfs/dfs
- 코딩테스트실력진단
- 최단경로
- LLM
- 이분탐색
- speaking
- Lora
- Coursera
- peft
- 플로이드와샬
- Python
- 머신러닝
- DP
- Study
- 코드트리
- 완전탐색
- 스터디
- English
- Generative AI
- 그래프이론
- 코딩테스트
Archives
- Today
- Total
생각하는 아져씨
[Python] sys.stdin.readline 와 readline(), readlines()의 차이는? 본문
파이썬 코딩테스트를 풀다보면 input을 받아야 하는 상황이 빈번한데, 대부분 이 2가지를 많이 쓴다.
- input() : 입력의 개수가 많은 경우 동작 속도가 느려 시간 초과 발생
- 파이썬 sys 라이브러리에 정의되어 있는 함수: sys.stdin.readline()
보통 sys.stdin.readline이 속도가 빨라서 많이 쓰이는데, 문제를 풀다가 종종 헷갈려서 차이를 정리해보았다.
1. sys.stdin.readlines()
- 여러 줄을 입력으로 받는다. (종료될 때 까지)
- Ctrl+D 를 누르면 입력받기가 종료되고 다음 코드를 진행한다.
import sys
lines = sys.stdin.readlines()
print(lines)
>> 1
>> 2
>> 3
>> 4
# Press Ctrl + D
>> ['1\n', '2\n', '3\n', '4\n']
2. sys.stdin.readline()
- 한줄씩 입력을 받는다. (for문을 쓰면 여러 줄을 입력 받을 수 있다.)
import sys
n = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(n)]
print(data)
>> 3
>> This
>> is
>> Python
>> ['This', 'is', 'Python']
3. sys.stdin.readline() 과 sys.stdin.readline 의 동작 차이
코드작성 할 때 종종 실수했던 부분이 여기이다. 괄호() 하나로 동작이 달라져서 어처구니 없는 에러를 만나게 된다. 🤯
import sys
input1 = sys.stdin.readline
input2 = sys.stdin.readline().rstrip()
print('input1: ', input1().rstrip().split(' '))
print('input2: ', input2.split(' '))
a, b = map(int, input1().rstrip().split(' '))
c, d = map(int, input2.split(' '))
print('a, b: ', a, b)
print('c, d: ', c, d)
input1은 괄호가 없이 할당, input2는 괄호가 있는 채로 할당.
이 코드를 실행해보기 전에 예상했던 시나리오는 다음과 같다.
input1 입력받고 input2 입력받고 --> 다음 map함수에서 input1 받고 input2 받기
하지만 결과는 살짝 달랐다.
>> 1 2
>> 2 3
>> input1: ['2', '3']
>> input2: ['1', '2']
>> 4 5
>> a, b: 4 5
>> c, d: 1 2
실제 동작 과정은
input2 입력받고 input1 받고 --> 다음 map 함수에서 input1 받고 input2는 받지 않음
약간 당황스러웠지만 너무나 당연한 결과다.
- 괄호가 있는 채로 먼저 선언된 input2가 코드 실행 시작부터 입력을 받는다.
- 그리고 첫번째 print문에서 input1이 괄호와 함께 호출된 순간, 두번째 입력을 받게된다. (그래서 input1 결과가 ['2', '3'])
- 두번째 print 문에서 input2는 앞에서 입력을 이미 받았으므로 출력(input2 결과가 ['1', '2'])
- 세번째 print 문에서 input1이 다시 호출되어서, 세번째 입력을 받게된다. (그래서 a, b 결과가 4, 5)
- 마지막 print 문에서 input2는 앞에서 입력을 이미 받았으므로 출력(그래서 c, d 결과가 1, 2)
가장 기본적인 코드 개념인데 잠시 놓쳤다. 반성 및 기억의 의미로 정리해보았다.
'Study > Python' 카테고리의 다른 글
[Python] itertools - 순열, 조합, 중복순열, 중복조합 (0) | 2023.02.10 |
---|---|
[Python] 나눗셈 연산 (0) | 2022.09.08 |
[Python] 파이썬 기본 문법 복습 (0) | 2022.06.15 |