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

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

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

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

Q&A

解決済

1回答

1595閲覧

python for 0での初期化

bullton

総合スコア39

Python 3.x

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

0グッド

0クリップ

投稿2018/02/24 11:37

import csv
csv_obj = csv.reader(open("sample.csv", "r"))
dt = [ v for v in csv_obj]
dat = [[float(elm) for elm in v] for v in dt]
data_body = [[0 for n in range(5)] for m in range(len(dat))]
label_body = [[0 for nn in range(2)] for mm in range(len(dat))]
for i in range(len(dat)):
for j in range(len(dat[i])):
if j <= 4:
data_body[i][j] = dat[i][j]
else:
label_body[i][j-5] = dat[i][j]
上記コードのうち
data_body = [[0 for n in range(5)] for m in range(len(dat))]
label_body = [[0 for nn in range(2)] for mm in range(len(dat))]
の部分で0で初期化せずに実行する方法はないでしょうか?
forの前についている0を外すと構文エラーとなってしまいます.

ご教授いただけたら幸いです.
よろしくお願いします.

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

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

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

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

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

guest

回答1

0

ベストアンサー

https://teratail.com/questions/114928

len(dat[i])が10以下であるとして、下記のように書けます。

Python

1data_body = [] 2label_body = [] 3for i in range(len(dat)): 4 tmp = [] 5 for j in range(5): 6 tmp.append(dat[i][j]) 7 data_body.append(tmp) 8 9 tmp = [] 10 for j in range(5, len(dat[i])): 11 tmp.append(dat[i][j]) 12 label_body.append(tmp)

下記が先程の回答です。比較してみてください。

python

1data_body = [] 2for m in range(len(dat)): 3 tmp = [] 4 for n in range(5): 5 tmp.append(0) 6 data_body.append(tmp)

追記

データの並びを考えずにコードを書いてました。
たぶんこれでいいんじゃないかと思いますが、どうでしょうか

Python

1data_body = [] 2label_body = [] 3for d in dat: 4 data_body.append(d[:5]) 5 label_body.append(d[5:])

投稿2018/02/24 11:51

編集2018/02/24 12:21
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

bullton

2018/02/24 11:56

ご回答ありがとうございます. 理想としては,csvファイルから取得した値のうち前半の任意の要素をdata_bodyへ残りのいくつかをlabel_bodyで与えたいのですが,それは可能でしょうか.
退会済みユーザー

退会済みユーザー

2018/02/24 11:59

失礼、間違えてますね。少々お待ちを
退会済みユーザー

退会済みユーザー

2018/02/24 12:05 編集

あんまりきれいなコードじゃないですが、こんな感じになるかと思います。
bullton

2018/02/24 12:18

ご回答ありがとうございます. いただいたコードを元に下記で実行したのですが,エラーが出力されます. csv_obj = csv.reader(open("123.csv", "r")) dt = [ v for v in csv_obj] dat = [[float(elm) for elm in v] for v in dt] data_body = [] label_body = [] for i in range(len(dat)): tmp = [] for j in range(5): tmp.append(dat[i][j]) data_body.append(tmp) tmp = [] for j in range(5, len(dat[i])): tmp.append(dat[i][j]) label_body.append() print(data_body) print(label_body) エラー内容 TypeError Traceback (most recent call last) <ipython-input-37-146f2c6019b4> in <module>() 13 for j in range(5, len(dat[i])): 14 tmp.append(dat[i][j]) ---> 15 label_body.append() 16 print(data_body) 17 print(label_body) TypeError: append() takes exactly one argument (0 given) 私の理解をすでに超えているのですが,もう少しお力を貸していただけないでしょうか.
bullton

2018/02/24 12:21

度々のご回答ありがとうございます. 最後にいただいたコードを実行したところ,希望通りの出力を得ることができました. 本当にありがとうございました. 自分の知識にはない記述法ですので,調べて理解しようと思います.
退会済みユーザー

退会済みユーザー

2018/02/24 12:24

最後のコードはforの中でdをprintさせてみるとなんとなく分かると思いますよ。d[:5]はの:5はスライス、と言うもので、0から4番目の要素を切り出します。d[5:]は5番目から最後まで、です。参考までに。
bullton

2018/02/24 12:27

はい,csvファイルの内容をいじったり値を変更しながら確認しておりました. ご丁寧にありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問