プログラミング初心者の備忘録

IT科所属、Pythonとか学校でやるCとかの覚書き。(頑張って趣味にするべく)競プロ始めました。

int()が配列じゃ使えないって話。

AOJで『a と b が1つの空白で区切られて与えられます。』という問題を見かけたけどさっぱりわからなかったので覚え書き。


とりあえずggったら最初らへんに出てきたサイト見るとこんなこと書いてました。
qiita.com

1行にスペース区切りで複数の文字列の入力
input
A B C
A,B,Cは,いずれも文字列.

入力
l = raw_input().split()
print l[0] # Aの値が出力される
print l[1] # Bの値が出力される
print l[2] # Cの値が出力される
split()は,スペース区切りで文字列をリストに分割する.

だそうです。
でもリストだとstr型で取り込んじゃうからどうしよっかなーと思い短絡的思考で

n = int(input().split())

とかわけわからんコード書いてみるもエラー連発。つらい。
再度ggってみるとこんな記事を発見。
automaprog.hatenadiary.jp

配列の型変換

ここで注意したいのが、int()型変換は配列に対して使うことができないということです。
さっきと同じノリで型変換をしようとするとエラーを出します。

>>> # 「1 2」を入力
>>> n = int(input().split(" "))

int() argument must be a string, a bytes-like object or a number, not 'list'
>>> # 「1 2」を入力
>>> n = int(input()).split(" ")

invalid literal for int() with base 10: '1 2'
※ 配列にする前に型変換をしようとしても、文字列(スペース)を含む値をintに変換することはできません。

配列の要素を型変換したい場合は、map()関数を使いましょう。

>>> # 「1 2」を入力
>>> n = input().split(" ")
>>> n_int = list(map(int,n))
>>> print(n_int)

[1, 2]

ということだそうで。
とりあえずよくわかんないけどこれで解決した模様です。
また後日ggりつつ解明を急ぎたいと思います。