satopoooonのブログ

自分向けの備忘録

pythonで動的に変数を作成したい(for文でloopまわして作成)

動的に変数を作成

pythonでつまずいたことがあったのでメモ

for文でloopさせて、動的に変数作成をしたかったんですよ。
その際に、引数もfor文で作成的なやつです。

間違った例↓

for n in dataframe.colums
 "data_{}".format(n) = dateframe[n]

これはダメでしたね。
.formatは文字列に変数を代入するという方式みたいですね。

やるとしたら、
[[dateframe[1],[dateframe[2],・・・・,datafarame[n]]
みたいに、リスト内リストか辞書型が良いみたいです。

list = [] #リスト
for column in dframe.columns:
     list.append(dframe[column].dropna())

list2 = {} #辞書型
for column in dframe.columns:
    list2[column] = dframe[column].dropna()

リスト内リストだと引数が数字になるけど、
辞書型だと、引数に文字列が使えるので便利かな、

ちなみに下記を参考にすると、exec関数で解決できるっぽいですが、
変数となるタイミングの問題で推奨されていなよう。
Python - pythonでname0,name1,name2・・・のように変数を宣言したい|teratail
モジュール外から呼び出すと、想定外の動きしないとか、そういうバグ
具体例としては以下2つの違い

for i in range(3):
    code = 'name{} = {}'.format(i, 3 ** i)  # 例として3のi乗を代入
    exec(code)

print name0, name1, name2  # ==> 1 3 9
name1 = 123

def foo(num):
    exec('name{} = 456'.format(num))
    print name1  # 123

foo(1)