うおのめマリーの満遊記

都会の団地でプー太郎をしているエンジニアの日常。たまに軽く仕事とったりしながらまったりとスローライフを満喫中。料理が得意です。

Python用標準入力チートシート

はじめに

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]

:::note warn 補足 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]]

最後に

もし他にも便利な取得方法などがあれば教えていただれば幸いです。