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

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

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

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

Q&A

解決済

3回答

175閲覧

python3 数値の受け取りとリスト化

Alter_9524

総合スコア22

Python 3.x

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

0グッド

0クリップ

投稿2018/10/10 01:25

編集2018/10/10 01:27

入力されたデータを受け取り、再度表示したいんですが、表示がおかしくなってしまいます。
対処法を教えてください。

[入力] 15 16 18 23 16 85 64
[コード] data = [] data.append(int(n) for n in input().rstrip().split(" ")) print(data)
[出力] [<generator object <genexpr> at 0x7fa2699ebf10>]
[期待する出力] [15,16,18,23,16,85,64]

data.append(input().split(" "))
print(data)
と記述してデータを文字列として受け取れば
[['15', '16', '18', '23', '16', '85', '64']]
と出力されるんですが、、、

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

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

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

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

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

guest

回答3

0

「表示がおかしい」のではなく、「なぜこのような表示になるか理由がわからない」ですよね。

>>> (int(n) for n in '15 16 18 23 16 85 64'.rstrip().split(" ")) <generator object <genexpr> at 0x10d160a40>

この部分のコードが generator を生成しています。

>>> [int(n) for n in '15 16 18 23 16 85 64'.rstrip().split(" ")] [15, 16, 18, 23, 16, 85, 64]

リスト内包表記は [] で囲みます。

そして、 append は要素の追加です。配列の結合ではありません。

>>> a = [1,2,3] >>> a.append(4) >>> a [1, 2, 3, 4]

つまり generator をリストに追加しただけになります。
上記コードをリスト内包表記に置き換えても、配列の中に配列ができることになります。

>>> d = [] >>> d.append([int(n) for n in '15 16 18 23 16 85 64'.rstrip().split(" ")]) >>> d [[15, 16, 18, 23, 16, 85, 64]]

求める結果はリスト内包表記の結果そのものなので、次のようにすればいいはずです。

>>> d = [int(n) for n in '15 16 18 23 16 85 64'.rstrip().split(" ")] >>> print(d) [15, 16, 18, 23, 16, 85, 64]

投稿2018/10/10 01:34

mather

総合スコア6753

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

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

0

python

1a="15 16 18 23 16 85 64" 2data=a.split(" ") 3print(data)

投稿2018/10/10 01:32

y_waiwai

総合スコア87719

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

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

0

ベストアンサー

リスト内包ではなくジェネレータ内包表記を使ってしまっています。

Python

1data = [int(n) for n in input().rstrip().split(" ")]

投稿2018/10/10 01:31

編集2018/10/10 01:41
LouiS0616

総合スコア35658

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

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

Alter_9524

2018/10/10 01:35

ありがとうございます。 appendではなく=で直接入れればよかったんですね。 また例えばデータが 12 5 93 61 15 1 5 15 のように複数行に渡る場合はどうしたらよいでしょう。 そのままfor文に入れてしまうと最終行の値だけがリストに入ることになってしまします。。。
Alter_9524

2018/10/10 01:37

data.append([int(n) for n in input().rstrip().split(" ")]) と記述して複数行の値の取得に成功しました。 []が抜けていたようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問