質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

6055閲覧

標準入力で1行にある複数の数字をリスト化

kotokoto

総合スコア18

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2017/02/21 13:36

標準入力で
1.2 2.4 3.6
のようにスペースで区切られた数字があります。

これを読み込んで、数値のリストにするにはどうすればいいですか?

自分なりに下記のように考えたのですが、もっと簡単にできるんだろうと思います。コメントは自分なりの解釈です。

b=input().split(" ") //標準入力で数字を読み込む(文字になる?)
c=map(float,b) //小数点なので、map(float,b)とする?
d=list(c) //リストに入れる?

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

c=map(float,b)の段階ですでにリストになっていると思います。
なので

python

1b = input().split(" ") 2d = map(float,b)

だけでいいと思います。
ワンライナーがよければ、

python

1d = map(float, input().split(" "))

です。

投稿2017/02/21 13:56

kokardy

総合スコア781

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kotokoto

2017/02/22 12:26

kokardyさん、こんばんは。 回答ありがとうございます。 d = map(float, input().split(" ")) print(d) のように実行したところ、 <map object at 0x7f18b666a518> と表示されます。これは何でしょうか? [1.2 2.4 3.6] のような結果が欲しいのですがどうすればいいのでしょうか? よろしくお願いします。
kokardy

2017/02/22 14:31

失礼しました。 python3系はmap関数はlistではなくてmapオブジェクトを返すのでした。 なので、listへのキャストが必要です。 d = list(map(float, input().split(" "))) ですね
kotokoto

2017/02/22 15:35

kokardyさん、回答ありがとうございます。 試したところ、うまくいきました。 理解のために確認なんですが、 d = map(float, input().split(" ")) print(d) で <map object at 0x7f18b666a518> と表示されるのは、 は、プリントした結果は、「0x7f18b666a518」というオブジェクトですよ。という意味ですか? また、mapオブジェクトをlistという別の型に変える必要がある。→だからキャスト(型変換??)する。 という理解であっていますか? 何度もすみません。それほど急ぎませんので可能な範囲で教えてください。 よろしくお願いします。
kokardy

2017/02/23 16:26

print(obj)で表示されるのは、そのオブジェクトの__unicode__(self)で返る値です。オブジェクトに__unicode__がないと、<map object at 0x7f18b666a518>のような形式でクラス名とオブジェクトIDが表示されます。 map→listは実際にはキャストというよりは、list関数でlist化するという方が正確かもしれません。型変換が必要かどうかは、場合によります。for f in d:とかで使うならmapのままでもOKです。今回はlistをprintした表記を求められていたので要素数が少ないため、listにした方が早いですが、要素数が多かったり無限リストを扱いたかったらmapのままの方がいいと思います。気になったらその辺は「python iterator」とかでググるといいです。
kotokoto

2017/02/25 01:57

kokardyさん、回答、およびアドバイスありがとうございます。 python iteratorをググって理解を深めたいと思います。(ちょっと時間が掛かります。。。) まずはお礼まで。
guest

0

まず、Pythonにおけるコメントは、 # を使います。
コメントで行っていることを解説します。

python

1b = input() # 標準入力を変数bに入れる 2b = b.split(" ") # 変数bのデータ(str) を空文字列(スペース)で分割してリスト化 3c = map(float, b) # 変数bのデータ(list) をfloatに変換した、mapオブジェクト(リストのようなもの)をcに代入 4c = list(c) # map型オブジェクトをlistに変換して、cに再代入

mapを使わない方法は以下のようになります。
こちらのほうがPythonらしいと思います。

python

1c = [float(i) for i in b] # リスト内包表記を使用

リスト内包表記を使わない場合は、以下のようにfor文で置き換えできます。

python

1c = [] 2for i in b: 3 c.append(float(i)

投稿2017/02/22 07:44

terapyon

総合スコア313

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kotokoto

2017/02/22 12:34

terapyonさん、 回答ありがとうございます。 コメントのご指摘ありがとうございます。 b=input().split(" ") c = [float(i) for i in b] print(C) とすると、 ValueError: could not convert string to float: というエラーが返ってきます。 b=input().split(" ") print(b) とすると 1.2 2.4 3.6 と帰ってきますが、これが文字(String)だからでしょうか? 1行にある複数数字(float)をそのまま数字のリストにする簡単な方法はないでしょうか? 標準入力 1.2 2.4 3.6 に対して何かをして [1.2 2.4 3.6] という数字のリストを作るイメージです。 よろしくお願いします。
terapyon

2017/02/23 01:27

> b=input().split(" ") > print(b) > とすると > 1.2 2.4 3.6 > と帰ってきますが、これが文字(String)だからでしょうか? とのことですが、本当ですか? print(b) している時点で、bは、list型になっているはずです。しかし、コメントに寄ると文字列が返ってきているように見えます。 `ValueError: could not convert string to float: ` は、文字列を変換できないとと言っていますね。 私が提示した方法が簡単に変換するわかりやすい方法だと思いますよ。
kotokoto

2017/02/23 10:36

terapyonさん、回答ありがとうございます。 私の確認が間違えていました。 b=input().split(" ") print(b) とすると ['1.2', '2.4', '3.6']と帰ってきて、 b=input().split(" ") c = [float(i) for i in b] print(c) を実行すると [1.2, 2.4, 3.6] という結果になりました。 煩わせてすみませんでした。また回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問