Pythonのinput().split()で入力を整数列に変換する
- 作成日: 2022-05-19
- 更新日: 2023-12-25
- カテゴリ: Python
Pythonのinput().split()
Pythonではinput()
関数という組み込み関数を使うことができます。
これは標準入力から一行読み取る関数です。
読み取った行は文字列になります。
Pythonの文字列にはsplit()
というメソッドがあります。
これはデフォルトで半角スペースを区切り文字として、トークンを分割するメソッドです。
つまりinput().split()
と書くと、入力された半角スペース区切りの文字列をトークン列に変換することができます。
この記事ではこのような方法を使って標準入力から読み込んだ文字列を整数列に変換する方法を解説します。
関連記事
頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方
状態遷移による文字列パースのテクニック【Python】
頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方
状態遷移による文字列パースのテクニック【Python】
input().split()の動作を見てみる
↓のコードを書きます。
toks = input().split()
print(toks)
上記のコードを実行すると標準入力の入力待ちになります。
「1 2」のように入力すると↓の結果になります。
1 2
['1', '2']
input()
は入力で「1 2」を文字列として読み込みます。
そして文字列のメソッドsplit()
を呼び出し、「1 2」を半角スペースで分割します。
その結果はリストで返ってきます。
リストの中には分割された文字列が格納されます。
整数列に変換する
さきほどのinput().split()
を応用して整数列のリストを作ってみます。
方法の1つとしてリスト内包表記を組み合わせて使います。
↓のコードを書きます。
digs = [int(tok) for tok in input().split()]
print(digs)
上記のコードを実行して「1 2 3」と入力します。
結果は↓になります。
1 2 3
[1, 2, 3]
入力された「1 2 3」という文字列がトークンに分割され、そのトークンが整数に変換されてリストに格納されます。
以上はリスト内包表記を使った方法です。
もう1つあります。
map()
を使う方法です。
↓のようにコードを書きます。
digs = list(map(int, input().split()))
print(digs)
上記のコードを実行して「1 2 3」と入力すると↓の結果になります。
1 2 3
[1, 2, 3]
map()
は組み込みの関数です。
第1引数の関数を第2引数のリストの要素に適用します。
つまり
map(int, input().split())
という部分はinput().split()
で得られたトークンのリストの要素にint()
を順に適用し、その結果をリストに保存する、という意味になります。
input().split()
で得られるトークン列は['1', '2', '3']
のような文字列のリストです。
このリストの要素、たとえば1
がint()
に渡されて、その結果が新しいリストに保存されていきます。
つまりfor
文で言うと↓のような処理をしています。
result = []
for el in ['1', '2', '3']:
result.append(int(el))
行列を整数に変換する
競技プログラミングなどでよくあるのが↓のようなフォーマットの入力です。
行数
数列1
数列2
数列3
...
1行目に行数が入力されて、それ以降にその行数分の数列が入力されていきます。
このような入力を処理したい場合は↓のようにコードを書きます。
N = int(input())
mat = [list(map(int, input().split())) for _ in range(N)]
print(mat)
上記のコードを実行して
3
1 2 3
4 5 6
7 8 9
という風に入力すると↓の結果になります。
3
1 2 3
4 5 6
7 8 9
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
この方法はmap
とリスト内包表記を組み合わせて使っています。
半角スペース以外の文字で分割する
split()
の第1引数には区切り文字を指定できます。
実行するとその区切り文字で文字列が分割されます。
toks = '1,2,3'.split(',')
print(toks) # ['1', '2', '3']
上記のコードはカンマ(,
)で分割しているところです。
簡易的なCSVな文字列を分割できます。
ただしCSVはRFCなどで仕様が決められているので、split()
だけではその仕様に完璧に応えられないということに注意が必要です。
入力から辞書を生成する
input()
から2行、キー列、値列を入力して、それを辞書に変換するということもできます。
↓のようにコードを書きます。
d = dict(zip(input().split(), input().split()))
print(d)
上記のコードを実行すると↓のような結果になります。
a b c
1 2 3
{'a': '1', 'b': '2', 'c': '3'}
値を整数にしておきたい場合はlist(map(int, input().split()))
を組み合わせて使います。
おわりに
今回はPythonのinput().split()
について解説しました。
競技プログラミングなどのショートコーディングで使えるかと思います。
🦝 < 一緒に競技しようぜ
🐭 < 競争本能!