🐥

競技プログラミング【Python】のよく使う標準入力パターン

2024/11/30に公開

競技プログラミング【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