

python3におけるfor文の使い方で困っています。  
ある関数にfor文にリストを流し込み、算出された結果を別々のオブジェクトに  
保存をしたいのですが、上手くいきません。当方、エンジニアではないので、  
質問の仕方が不適切かもしれず恐縮ですが、よろしくお願い致します。  
下記がコードになります。

[code]

    def test(x):
        x
        return x
    
    test_list=['1','2','3','4','5']
    x = test_list
    test_df = [df1,df2,df3,df4,df5]
    y = test_df
    
    for i1,i2 in zip(x,y):
        y = test(x)
    df1
    
[/code]

df1,df2,df3,df4,df5 にそれぞれ、'1','2','3','4','5'を格納したい


CC BY-SA 4.0
2018-05-19T17:15:18.513
44089
2018-05-21T16:03:40.910
2018-05-20T01:58:23.967
3060
28578
question
python python3
python3のfor~zipの使い方と値のオブジェクトへの格納の仕方について


以下のように書けば別々のオブジェクトに保存できます。

[code]

    test_list=['1','2','3','4','5']
    test_df = ['df1','df2','df3','df4','df5']
    for x, y in zip(test_list, test_df):
        exec(y + " = '" + x + "'")
    
[/code]

なお、そのままリストで使うか、辞書型を使って、次のように辞書を作成した方がわかりやすいと思います。

[code]

    test_list=['1','2','3','4','5']
    test_df = [1, 2, 3, 4, 5]
    df = {}
    for x, y in zip(test_list, test_df):
        df[y] = x
    
[/code]

使用する場合には、次のようにします。

[code]

    df[1]
    
[/code]


CC BY-SA 4.0
2018-05-20T03:44:30.843
44100
2018-05-20T03:44:30.843
15171
44089
answer

[code]

    def square(num):
        return num*num;
    xs = [1,2,3,4,5]
    
[/code]

として

[code]

    df1 = 1, df2 = 4, df3 = 9, df4 = 16, df5 = 25
    
[/code]

という変数に代入された状態が得たいとする。  
この時pythonでもっとも簡潔に書くならば、以下のようなリスト内法表記と呼ばれるforの使い方をしたほうがよく、またリストを分解して一気に代入するというもテクニックがあるのでこの二つを使う。求める状態を得るにはこの一行だけでよい。今回はわかりやすい例としてsquare関数を定義したが、関数自体は自由に置き換え可能だ。(squareでなくても質問者の定義したtestでもok)

[code]

    df1,df2,df3,df4,df5 = [square(x) for x in xs]
    
[/code]

ここで右辺のイメージは、xsというリスト[1,2,3,4,5]から要素を一つずつ取り出して関数を適用し、その返り値をリストに格納するという操作が行われる。よって右辺は[1,4,9,16,25]になる。  
左辺は右辺のリストを左から順番に格納していくので求める結果が得られる。  
testdfを得るためには、

[code]

    test_df =[df1,df2,df3,df4,df5] #または
    test_df = [square(x) for x in xs]
    
[/code]

pythonのふつうのfor文で同じことをやりたい場合は、下記の記述でも同じような結果が得られるので参考にしてください。(ただし上の書き方のほうが効率的で、かつインデントもなく短いのでおススメです。)

[code]

    test_df = []
    for x in xs:
        test_df.append(square(x))
    df1,df2,df3,df4,df5 = test_df
    
[/code]


CC BY-SA 4.0
2018-05-21T16:03:40.910
44140
2018-05-21T16:03:40.910
25980
44089
answer