2017年3月1日水曜日
スペースで区切られた数値を数値型でリストに格納【Python】
いろんなものを使ってますが、これで
入力されたスペース区切りの数値をそれぞれリストに格納することができます
例 入力値 "1 1 2 3 5 8 13 21 34 55 89 144"
a = list(map(int,input().split(" ")))
print(a)
=> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
---------------
結論だけ先に書きましたが、このブログでは結論に至るまでの考え方も載せたいので以下に書いていきます。
Pythonの初級プログラム以上では、入力された数値をリスト化して計算に使用する機会が非常に多くなりました。
スペース区切り(カンマ区切りなどでも良いですが)の数値をリスト化する際には、
a = input().split(" ")
を主に使います。インプットした文字列をスペースでスプリットするということです。
入力される文字が2行あった場合、
1 1 3 5
8 13 21 34
に対して
a = input().split(" ")
b = input().split(" ")
と2回インプットを行うことで、2行の文字列をa,bそれぞれのリストに格納できます。
ここでaの最初の数字とbの最初の数字を足し合わせる場合、
a[0] + b[0]
としたいのですが、入力された数字は"文字列"であるため、結果は
"18"
と出力されてしまいます。
したがって数字の計算をしたい場合は
int(a[0]) + int(b[0])
(出力: 9)
とint()で囲い、数値型に変換しなければなりません。
計算をする場合はほとんど数値型であるため、計算するたびにint()を出すのは面倒だしかっこ良くないです。
であれば、結局文字型で格納されているリスト内の数字を数値型にしてしまえば、毎回int()などを使わなくても良いことになります。
そこで使えるのが リスト内の文字列を数値(整数など)に変換【Python】最大値最小値の取得 で覚えたmap()です。
map()により、リスト内の文字型を数値型に変換することができます
これで入力された文字を b に数値型でリスト化することができました。
しかし1行の数字の入力に対して、2行のコードを使用するのはスマートではないと思いますし、入力される文字列が2行、3行と増えてしまうと、それだけプログラムも長くなってしまいます。
そこで1行にまとめる方法案として
いきなり数値型のままリストに格納する関数、メソッドがあるのか調べる
という考えを持っていましたが、初心者の私が調べたところなさそうでした。
うーん、どうすれば1行にできるかと悩んでいてもう一度コードを見たところ、
a = input().split(" ")
b = list(map(int,a))
「あれ、bの式にa入れればいいじゃん!」
ということにやっと気づき、1行のプログラムを書くことができました。
ちゃんちゃん♪
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿