🐥
競技プログラミング【Python】のよく使う標準入力パターン
競技プログラミング【Python】のよく使う標準入力パターン
1. 1行の入力を取得する
1行の入力を文字列として取得する場合:
import sys
input = sys.stdin.read # 標準入力を高速化する場合に設定
line = input().strip() # 末尾の改行を除去
2. スペース区切りの入力を取得してリスト化
data = input().split() # ['1', '2', '3']
数値リストに変換する場合:
data = list(map(int, input().split())) # [1, 2, 3]
3. 複数行の入力を一括で処理
import sys
lines = sys.stdin.read().strip().split('\n')
行ごとに分割されたリストとして取得できます。例えば、
入力:
1 2 3
4 5 6
出力:
[['1', '2', '3'], ['4', '5', '6']]
4. 固定回数の入力を処理
例: 最初の行に入力行数が指定されている場合
n = int(input()) # 行数を取得
data = [input() for _ in range(n)] # 各行をリストに格納
数値リストにする場合:
n = int(input())
data = [list(map(int, input().split())) for _ in range(n)]
5. 1行のカンマ区切りを処理
data = list(map(int, input().split(','))) # 例: 1,2,3 -> [1, 2, 3]
6. 複数値を取得して個別の変数に格納
a, b = map(int, input().split()) # 例: 1 2 -> a=1, b=2
7. 辞書形式で入力を処理
n = int(input())
data = {}
for _ in range(n):
key, value = input().split()
data[key] = int(value) # キーと値を辞書に追加
8. numpyを使って入力を処理(大規模データ向け)
import numpy as np
n, m = map(int, input().split())
matrix = np.array([list(map(int, input().split())) for _ in range(n)])
メモ
sys.stdin.read を使う理由
標準入力が大量の場合(例: 競技プログラミングのケース)では、input()よりsys.stdin.readの方が高速。
末尾の改行除去
strip() は入力の前後に余計な空白や改行がある場合に便利。
Discussion