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

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

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

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

Q&A

解決済

2回答

255閲覧

数値文字列から数値リスト作成でエラー

sigefuji

総合スコア125

Python 3.x

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

0グッド

0クリップ

投稿2022/08/19 12:05

前提

下記のコードは参考書籍のコードにread_para関数を追加したものの一部です。
これらは同一ファイル内にあります。
read_para関数はinit_mnist関数内で呼びます。
すると#errorとある個所で下記のメーッセージがでます。
この行は空白で区切られた数値をlznctにリストでセットすることです。
エラーの内容は、line.split(' ')は文字列であるべしで、数値やリストではないこと、と解釈しましたが、他の例ではうまく処理されます。
どこまでコードを開示すればよいかわかりかねますが、とりあえずの範囲を開示しました。
何が原因かわかるでしょうか。ご教示頂ければ幸いです。
python 3.8 環境はspyder
参考書籍名 ゼロから作るDeeplerning 7章mnist.pyより改変

発生している問題・エラーメッセージ

TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

該当のソースコード

python

1def read_para(): 2 fn = dataset_dir + "/" + "para.txt" 3 f=open(fn, "r") 4 line = f.readline() 5 ------- 6 line = f.readline() 7 file_size = int(line) 8 print("file_size",file_size) # file_size 129600000 9 10 line = f.readline() 11 print(line)    # 41793 25871 10966 24832 40538 12 lznct = int(line.split(' ')) # error発生 13 line = f.readline() 14 tznct = int(line.split(' ')) 15 print("lznct",lznct)     16 print("tznct",tznct) 17 18def init_mnist(): 19 print("init_mnist ") 20 read_para() 21 22 download_mnist() 23 dataset = _convert_numpy() 24 print("Creating pickle file ...") 25 with open(save_file, 'wb') as f: 26 pickle.dump(dataset, f, -1) 27 print("Done!") 28

試したこと

再現性が複雑なので詳細には記述しずらいのですが、関係なさそうに思われる個所の変更で違う現象もあります。それで、一番簡明と思われるところをまず質問しました。C言語などと違い、変数や関数の関係がインタプリタのためいまいち
理解が進まない所で苦慮しています。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

meg_

2022/08/19 12:23

> 参考書籍のコードにread_para関数を追加したものの一部です。 「read_para関数」は質問者さんのオリジナルの関数ですか? どのような仕様なのか簡単に説明いただけないでしょうか? また何かを参考に作成されましたか?
meg_

2022/08/19 14:43 編集

エラーは「int()」でしたね。間違ったコメントでしたので削除いたします。失礼しました。
guest

回答2

0

ベストアンサー

エラーの内容は、「line.split(' ')は文字列であるべしで、数値やリストではないこと」ではなく、「int()の引数は、listではなく、文字列やbyte列やintである必要があります」と書いてあります。

実際、int()の中身は line.split()で、これはリストを返します。 int()にリストは渡せません。

投稿2022/08/19 14:04

TakaiY

総合スコア12765

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

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

sigefuji

2022/08/19 23:41

ご返事ありがとうございます。 エラーの理解は同じなのですが、line.split()がリストで、int()にリストを渡せないとういうことがわかりませんでした。int()にリストの要素を渡せば、要素を変換し、出力先のリストに追加してくれるのではないかと(勝手に)思っていました。pythonは初心で、このようなリストと要素の関係や、その関数(操作)の対象とするものが何かがよくわかりません。このような疑問に対応する良い解説記事もうまくみつけられませんでした。 で、質問項目にはあたらないかも知れませんが、どのように記述するとよいでしょうか。
sigefuji

2022/08/20 01:23

最終目的は未解決ですが、listを数だけ分解して、数値に変換してリストに追加すると言う方針で考えることにしますので、この質問は終了とします。上記の方針で困れば改めて質問します。
TakaiY

2022/08/20 03:06

関数の使いかたがわからないのであれば、まずは一次情報=pythonのドキュメント をあたるべきです。 https://docs.python.org/ja/3/library/functions.html ここから、int() の説明に飛ぶと、 https://docs.python.org/ja/3/library/functions.html?highlight=int#int ちゃんと、引数は int か 文字列 と書いてあります。 他の関数についても同様だし、モジュールの情報もそのモジュールの提供先が出しているドキュメントを使うべきです。 ただ、そういうドキュメントには実例などはあまり載っていないので、実例をwebで捜すなどするのがいいと思います。 文字列のリストを intのリストに変換する方法なら、「python リストの内容をintに変換」で検索するといろいろ出てきます。 これらを参考にすればできるでしょう。 そのときも、ただコピーするのでなく、その記述の意味を理解して使っていくようにすれば先に応用できるようになりますね。
sigefuji

2022/08/20 05:38

コメントありがとうございます。 ご案内の1次情報(関数仕様)がよいですね。検索してもこの一次情報になかなかたどり着けませんでした。 今後は参考参照します。 その後この課題は解決済手段として投稿しておきました。 なおTakaiYさんへの個別評価方法がわかりませんのでご容赦ください。
sigefuji

2022/08/20 05:43

やはり作法に戸惑いながらも少し自分で考えると理解しやすいですね。余談失礼。
guest

0

なおこの質問の課題は次のように解決しました。
下記のとおり、考えられる3通りで確かめられました。2.3番目の方法は最初に想定できるのですが(c言語風に)、質問当初は1番目のようなpython風の方法があるのではないかとなんとなく思っていました。

なおTakaiYさんへの個別評価方法がよくわかりませんのでご勘弁ください。

mojilist = line.split() lznct = [int(s) for s in mojilist ] print("lznct1",lznct) ''' lznct2=[] for s in mojilist: print("s",s) a_val = int(s) print("a_val",a_val) lznct2.append(a_val) print("lznct2",lznct2) lznct3=[] for n in range(p_out): print("mojilist[n]",mojilist[n]) a_val = int(mojilist[n]) lznct3.append(a_val) print("lznct3",lznct3)

投稿2022/08/20 05:38

sigefuji

総合スコア125

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問