🎉

Python入力チートシート

に公開

はじめに

コーディング試験や競技プログラミング等で頻繁に利用する入力のチートシートを作成しました。
この記事は私のメモ用として作成しました。
初学者の方やこれから競技プログラミングに挑戦する方のお役に立てれば幸いです。


🔢 1. 単一の入力

最もシンプルな形式です。

整数が1つ

N
  • コード例:

n = int(input())

文字列が1つ

S
  • コード例:

s = input()

📝 2. 1行に複数の入力

スペース区切りで複数の値が与えられます。

整数が複数 (個数が決まっている場合)

N M のように、2つや3つの整数が与えられます。

N M
  • コード例: map() を使って一度に受け取り、それぞれの変数に割り当てます。

n, m = map(int, input().split())

整数のリスト (個数が可変の場合)

A1 A2 A3 ... のように、1行に複数の整数が並んでいます。

A1 A2 A3 ...
  • コード例: map() の結果を list() でリストに変換します。

a_list = list(map(int, input().split()))

split() は、文字列をスペースや改行で区切ってリストにするメソッドです。

文字列のリスト

S1 S2 S3 ...
  • コード例: split() を使うだけでOKです。

s_list = input().split()

🏙️ 3. 複数行にわたる入力

最も一般的な形式で、様々なバリエーションがあります。

N個の値がN行にわたって与えられる

最初に個数 N が与えられ、その後の N 行にデータが続くパターンです。

  • 例1: N個の整数

N
A1
A2
...
AN
  • コード例:

n = int(input())
a = [int(input()) for _ in range(n)]
  • 例2: N個の文字列

N
S1
S2
...
SN
  • コード例:

n = int(input())
s = [input() for _ in range(n)]
  • 例3: Nペアの整数

N
A1 B1
A2 B2
...
AN BN
  • コード例:

n = int(input())
ab_pairs = [list(map(int, input().split())) for _ in range(n)]

2次元配列・グリッド形式

迷路問題や盤面を扱う問題で頻出します。

  • 例1: 文字で構成されるグリッド

H W
S11S12...S1W
S21S22...S2W
...
SH1SH2...SHW
  • コード例:

h, w = map(int, input().split())
grid = [input() for _ in range(h)]
# grid[i][j] でアクセスできます
  • 例2: 整数で構成されるグリッド

H W
A11 A12 ... A1W
A21 A22 ... A2W
...
AH1 AH2 ... AHW
  • コード例:

h, w = map(int, input().split())
grid = [list(map(int, input().split())) for _ in range(h)]

個数が不定の入力 (EOFまで)

入力の行数が明示されず、「入力の終わりまで」受け取る形式です。最近のコンテストでは稀ですが、古い問題では見られます。

  • コード例: try-exceptEOFError を捕捉します。

import sys

lines = []
while True:
    try:
        line = input()
        if not line: # 空行で終了する場合
            break
        lines.append(line)
    except EOFError:
        break

💡 4. 特殊な形式

頻度は低いですが、知っておくと役立つ形式です。

カンマ区切りなど、区切り文字がスペース以外

1,2,3,4,5
  • コード例: split() に区切り文字を指定します。

nums = list(map(int, input().split(',')))

浮動小数点数

整数と同様に float を使って変換します。

1.23 4.56
  • コード例:

x, y = map(float, input().split())

まとめ

  • まず問題文の入力形式をよく読むことが最も重要です。
  • ほとんどの入力は**「個数を受け取る → ループで回す」**という構造になっています。
  • map(int, input().split()) とリスト内包表記 [... for _ in range(n)] は頻繁に使うので、覚えておくと非常に便利です。

これらのパターンを覚えておけば、ほとんどすべての問題の入力に対応できます。


参考リンク


ご質問や追加してほしい内容があれば、コメントで教えてください!

Discussion