AtCoderなどのプログラミングコンテストでは、標準入力から値を取得します。
業務アプリなどでは標準入力を使うことは少なく、また、取得方法はパターン化されるので、まとめておきます。
コンテストは時間勝負なので、標準入力から値を取ることに手間取って時間を消費してしまわないようにしましょう!
なお、pythonの場合の最もシンプルな標準入力取得は s = input() なのですが、これは説明不要かと思いますので省略します。
コンテストでは数字が渡されることが多いので、数字の場合を先に記載して、そのあとに文字列の場合を記載しています。
■2020/8/29追記
この記事での紹介内容をjupyter notebookで作成したファイルを載せておきます。
ご自由にお役立てください。
連続文字数値(配列)
数字がスペース区切りで複数渡される場合で、配列に格納したい時は以下のようにします。
n = list(map(int,input().split()))
print(n)
入力例
1 5 6 1 88
Output
[1, 5, 6, 1, 88]
連続文字数値(異なる変数)
複数文字がスペース区切りで渡される場合で、それぞれを別の変数に格納したい場合です。渡される値の数と入れる変数の数は合わせましょう。
b, c, d = map(int, input().split())
print(b)
print(c)
print(d)
入力例
5 7 9
Output
5
7
9
改行型数値
数字が改行で区切られて渡ってくるパターンです。取ってくる行数をrange()で指定しています(下記例だと5行)。
n = [int(input()) for _ in range(5)]
print(n)
入力例
1
2
3
4
5
Output
[1, 2, 3, 4, 5]
複数行2数値
1行にスペース区切りで複数変数があり、それが複数行で渡されるパターンです。
素直に二次元配列に入れるとともに、各行の1つ目だけの配列、2つ目だけの配列も作っています。
なお、二次元配列の要素で、同一行は無視したい(配列要素を一意にしたい)場合はset型の配列を作りましょう。
# 一意にしたい場合はset()
# xy = set()
xy = []
x = []
y = []
for _ in range(5):
xi, yi = list(map(int, input().split()))
xy.append([xi, yi])
# set型の場合はadd
# xy.add((xi, yi))
x.append(xi)
y.append(yi)
print(xy)
print(x)
print(y)
入力例
1 2
4 6
9 3
12 66
5 -6
Output
[[1, 2], [4, 6], [9, 3], [12, 66], [5, -6]]
[1, 4, 9, 12, 5]
[2, 6, 3, 66, -6]
連続文字列
文字がスペース区切りで複数渡される場合で、配列に格納したい時は以下のようにします。
s = input().split()
print(s)
入力例
aa ee rr
Output
[‘aa’, ‘ee’, ‘rr’]
改行型文字列
文字列が改行で区切られて渡ってくるパターンです。取ってくる行数をrange()で指定しています(下記例だと5行)。
s = [input() for _ in range(5)]
print(s)
入力例
a
s
d
e
r
Output
[‘a’, ‘s’, ‘d’, ‘e’, ‘r’]
行列
1行に複数要素があるものが、複数行渡されるパターンです。2次元配列にそのまま入れる場合は以下になります。取ってくる行数をrange()で指定しています(下記例だと3行)。
また、下記例では文字列で設定しています。
a = [input().split() for l in range(3)]
print(a)
入力例
1 2 5
1 3 3
5 5 5
Output
[[‘1’, ‘2’, ‘5’], [‘1’, ‘3’, ‘3’], [‘5’, ‘5’, ‘5’]]
コメント