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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

805閲覧

for文で参照するリストに、変数(リスト_n)を入れて任意のリストを呼べる方法を教えて頂きたいです。

C4H10

総合スコア1

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/27 02:44

前提・実現したいこと

初めまして、FXの自動売買をしてみたいと思い最近プログラミングを始めた者です。
(pythonの文法も調べながらでまだ定着していないめちゃくちゃな状態です・・・)

「実現したいこと」・・・・リスト名に変数(リスト_n)を入れて任意のリストを呼べる方法を教えて頂きたいです。

for文の中で
num_0,num_1,......,num_n
pred_list_1,pred_list_2,.......pred_list_n
とリストがあり、for文の途中で2つのリストを取り出して(num_0とpred_list_0)
その要素を新しいリストに入れたいと考えております。

#how_periodはfor文の中で変化する数字です。
#for文の中に以下のようなfor文があります

for pre , num in zip('pred_list_{}'.format(how_period),"num_{}".format(how_period)):
new = (pre,num)
two_append = 'list_{}.append(new)'.format(how_period)
exec(two_append)

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

for ~~~ in zip(ここに入れるリストがstr型になって困っています)

list_2 = [('p', 'n'), ('r', 'u'), ('e', 'm'), ('d', '_'), ('_', '2')] このようにリスト内の要素ではなく、str(リスト名)を追加してしまいます。

該当のソースコード

python

1#区間内での頻度の高い価格を見つける 2 3how_period = 0  #何回目の区間かを数える 4 5num_8h = 0 #(分足なので)480個=8h分 と数える為のもの 6min_val = 0 7max_val = 0 8 9low_8h , low_time_8h = 0 , 0 #最安値とその時の日時を入れる変数 10high_8h , high_time_8h = 0 , 0 #最高値とその時の日時を入れる変数 11 12 13for i , data in enumerate(df.itertuples()): 14 15 code = 'num_{} = []'.format(how_period) #リストを作成する(後々、各区間内で頻度の高い数値を探したいので価格を追加していくリスト) 16 append_code = 'num_{}.append({})'.format(how_period,data[7]) #作成したリストに追加していく 17 num_8h += 1 18 19##########1回目の動作###################### 20 if num_8h == 1 : #はじめの値をとりあえず最高値、最安値にしとく 21 exec(code) 22 exec(append_code) 23 24 low_8h = data[6] 25 high_8h = data[5] 26 27 low_time_8h = str(data[2])+str(data[3]) #日にち+時間  28 high_time_8h = str(data[2])+str(data[3]) 29 30 31 32###########2回目以降の動作############ 33 if num_8h > 1: # 前回までの最安値最高値と比較していく 34 append_code = 'num_{}.append({})'.format(how_period,data[7]) 35 exec(append_code) 36 37 if data[6] < low_8h : 38 low_8h = data[6] 39 low_time_8h = str(data[2])+str(data[3]) 40 41 if high_8h < data[5] : 42 high_8h = data[5] 43 high_time_8h = str(data[2])+str(data[3]) 44 45 if num_8h == 480 : #8hの区間が終わった時の処理 46 47 48 49######## K-means でクラスタリング?していく########## 50 51 array_code = 'array_{}=np.array(num_{})'.format(how_period,how_period) 52 exec(array_code) #numpy化 53 54 # 行列を転置 55 change_code = 'array_{}=array_{}.reshape(-1,1)'.format(how_period,how_period) 56 exec(change_code) 57 58 # クラスタ分析を実行 (クラスタ数=4) 59 pred_code = 'pred=KMeans(n_clusters=4).fit_predict(array_{})'.format(how_period) 60 exec(pred_code) 61 62 list_code='pred_list_{}=pred.tolist()'.format(how_period) 63 exec(list_code) 64 65#二次元のリストにする 66 make_list = 'list_{}=[]'.format(how_period) #価格とそれがどのクラスに入るかを一対一対応させるリストを作成 67 exec(make_list) 68 print('list_',str(how_period),' まで作ったよ') #リストをどこまで作ったか確認 69 70★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★↓ここです↓★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 71 72 for pre , num in zip('pred_list_{}'.format(how_period),"num_{}".format(how_period)): 73 new = (pre,num) 74 75 two_append = 'list_{}.append(new)'.format(how_period) 76 exec(two_append) 77 78############################################### 79 num_8h = 0 #8h数えるのはリセット 80 how_period += 1 #何回目の区間かを表す 81 82 code = 'num_{} = []'.format(how_period) 83 exec(code) #リストを作成 84 85 86 if low_time_8h < high_time_8h : #安値の時間のが早いから上昇トレンド 87 print('上昇トレンドです!'+' 最安値:'+low_8h+' 最高値:'+high_8h+' 時間'+high_time_8h) 88 else : 89 print('下降トレンドです!'+' 最安値:'+low_8h+' 最高値:'+high_8h+' 時間'+str(low_time_8h)) 90 91print('リストはnum_0から、num_'+str(how_period)+' まで作りました') 92 93 94 95 96

試したこと


Pre='pred_list_{}'.format(how_period)
Num="num_{}".format(how_period)
と別の変数?に代入して  for ~~~ in zip (Pre,Num) としてみました


内包表記とexec()でできないかやってみました。
two_dimensions='list_{}=[(pre,num) for pre,num in zip(pred_list_{},num_{})]'.format(how_period,how_period,how_period)
exec(two_dimensions)

③ググってみましたが、検索の仕方が悪いのか似た質問に辿り着けませんでした。

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

python3 , mac ,jupyterLab を使用しております。

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

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

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

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

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

guest

回答1

0

ベストアンサー

リストのリストを作って、そのインデックス(番号)でアクセスしてはどうでしょう

投稿2020/09/27 02:47

y_waiwai

総合スコア88042

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

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

C4H10

2020/09/27 03:01

大変助かりました!!! 今コードを書き換えてリストを呼び出すようにしたら上手くいきました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問