はじめに
python用の標準入力でよく使うものを集めたチートシートです。
便利そうなものがあれば随時更新してゆきます。
標準入力のコーディングに必要な関数
input()
入力で与えられるフォーマットを文字列で取得する
# 以下入力pを与えられるとすると
p
# pを取得してsに値を入れる
s = input()
# 出力
print(s)
>>> p (str)
input関数で取得した時点ではstr(文字列)なので、計算などで使用する場合は型を変えてあげる必要があります。
# 入力
3
i = int(input()) # 3を取得してint(整数)に変更してiに値を入れる
print(s) # 出力: 3 (int)
split()
文字列を分割する関数です
# 以下入力 a と b をスペースを挟んで与えられるとすると
a b
# a と b を取得して s にlist形式で入れる
s = input().split()
# 出力
print(s)
>>> ['a', 'b']
splitする数に合わせて変数を用意して直接変数に入れる方法もあります。
# 以下入力 a と b をスペースを挟んで与えられるとすると
a b
# a と b を取得して x と y にそれぞれ値を入れる
x, y = input().split()
# 出力
print(x)
>>> a
print(y)
>>> b
map()
第一引数に適用する関数、第二引数にリストなどのイテラブルオブジェクトを指定します。
イテラブルオブジェクトとはfor文などで要素を1つずつ取り出して処理できるようなオブジェクトのことを指します。(listやdictなど)
# 以下入力 1 と 2 をスペースを挟んで与えられるとすると
1 2
# 1 と 2 を取得して x と y にそれぞれ値を入れ、それぞれint型にする
x, y = map(int, input().split())
# 出力
print(x)
>>> a (int)
print(y)
>>> b (int)
range()
0から連番を作成します
for i in range(3):
print(i)
>>> 1
>>> 2
>>> 3
リストを生成することも可能です。
li = list(range(3))
print(li)
>>> [0,1,2]
よくでる標準入力
よくでる標準入力をここにまとめます。
1行に1つの入力を整数で取得
# 以下入力 1を1行与えられるとすると
1
a = int(input())
print(a)
>>> a (int)
1行に複数ある入力を整数で取得
# 以下入力 1 と 2をスペースを挟んで1行で与えられるとする
1 2
# それぞれ変数に格納
a, b = int(input().split())
print(a)
>>> 1 (int)
print(b)
>>> 2 (int)
# リストで取得したい場合
li = int(input().split())
print(li)
>>> [1, 2]
複数行にわたって1行に1つの入力を整数でlist取得
行数が指定されている場合
# 以下入力 1~3を3行で与えられるとすると
1
2
3
# for文で3回入力を取得して整数に変換後、listにする
li = [int(input) for i in range(3)]
# print(li)
>>> [1, 2, 3]
行数が指定されていない(不明な)場合
# 以下入力 1~NをN行で与えられるとすると
1
2
3
...
N
while True:
try:
i = map(int, input())
input_lines += i
except EOFError:
break
# print(li)
>>> [1, 2, 3]
補足
map()を使わずに i = int(input())としてもよさそうですが、繰り返しに使えないオブジェクト(ここでは整数)を繰り返し処理(ここでは +=)で使うことになり、TypeError: 'int' object is not iterable が発生するので必ず map() を使いましょう。
複数行にわたって1行に複数の入力を整数でlist取得
行数が指定されている場合
# 以下入力 1~6を3行で2つずつスペースを挟んで与えられるとすると
1 2
3 4
5 6
r = []
# for文で3回入力を取得して整数に変換後、listにし二次元配列で格納する
li = [r.append(list(map(int, input().split()))) for i in range(3)]
# print(r)
>>> [[1, 2], [3, 4], [5, 5]]
行数が指定されていない(不明な)場合
# 以下入力 1~NをN行で与えられるとすると
1 2
3 4
5 6
...
N N
while True:
try:
r.append(list(map(int, input().split())))
except EOFError:
break
# print(r)
>>> [[1, 2], [3, 4], [5, 6]... [N, N]]
最後に
もし他にも便利な取得方法などがあれば教えてください。