竸プロの「list(map(int, input().split()))」って何?

はじめに

Pythonで競技プログラミングする際に

1
list(map(int, input().split()))

のようなコードをよく見ると思います。

今回はこのコードの意味について解説します。

利用シーン

このコードは、数値のリストを標準入力から受け取る際に用います。

1
list(map(int, input().split()))

例えば、以下のような入力をとると

1
3 4 5
1
2
>>> list(map(int, input().split()))
[3, 4, 5]

数値のリストを得ることが出来ました。

以後も、断りがない限り同じように

1
3 4 5

を入力とします。

ステップを追って解説

input()

標準入力を文字列として受け取ります。

1
2
>>> input()
'3 4 5'

input().split()

splitで文字列を区切り文字で分割し、リスト化出来ます。

1
2
>>> input().split()
['3', '4', '5']

区切り文字を指定することもできますが、省略すると半角スペース改行で分割されるので、今回は省略しているわけです。

詳細は下記の解説をご参照ください。
Python splitの使い方まとめ

map(int, input().split())

高階関数mapは第一引数の処理を、第二引数のシーケンスの各要素に適用します。

つまり、文字列のリストの各要素を整数のリストに変換しています。

1
2
>>> map(int, input().split())
<map at 0x110c8f860>

何か、奇妙なものが得られました。
これはmapオブジェクトと呼ばれるものです。

これをリストに変換する必要があります。

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

リストへの変換はlist()とするだけでOK

1
2
>>> list(map(int, input().split()))
[3, 4, 5]

これで整数のリストを得ることが出来ました!

このようにlist(map(...))の構文はよく利用します。

下記の解説の中ではlamndaと組み合わせて使ったりもしています。

Python 内包表記とlambdaの書き方

おわりに

MENTAというサービスでプログラミング学習のサポートをしています。競技プログラミングについてもサポートできるので、ご興味がある方はぜひMENTAのDMでご連絡いただければと思います。