-1

ネストされたforループを使用して2次元配列をトラバースしようとしています。グラフにするときに値が異なりますが、データにアクセスしようとすると要素はすべて同じ。私はforループのさまざまなスタイルを試しましたが、同じエラーが発生します。これは、私がJavaから来ていると理解していないほどのエラーです。する方法Python 2.7でネストされたループ

predicted_values = 2*[2*[0]] # number of lines *[ number of data points *[0]] 

for row in predicted_values: 

    #last given price 
    row[0] = adj_close[len(adj_close)-1] 

    for index in xrange(1,len(row)): 

     random_float_0_1 = random.random() 
     drift = meanPDR -variance/2 
     random_offset = standard_deviation*norm.ppf(random_float_0_1) 
     t = drift + random_offset 
     predicted_stock_price = row[index-1]*math.exp(t) 
     row[index] = predicted_stock_price 
     print predicted_values 

    plt.plot(range(0,len(row)),row) 

私はそれがへのアクセス権を持つべきではないという以前のデータを上書きするために何が起こっ出力

[[152.186905, 149.88609120889242], [152.186905, 0]] 
[[152.186905, 149.88609120889242], [152.186905, 151.0754945683822]] 

にそれをしたいとき、これは

[[152.186905, 149.88609120889242], [152.186905, 149.88609120889242]] 
[[152.186905, 151.0754945683822], [152.186905, 151.0754945683822]] 

を出力します。

答えて

1

問題はループではありません。あなたがPythonリストの短い手の意味を理解していないということです。あなたは同じ 2要素のリストに2つの参照をした:

>>> pv = 2*[2*[0]] 
>>> pv 
[[0, 0], [0, 0]] 
>>> pv[0][1] = "new" 
>>> pv 
[[0, 'new'], [0, 'new']] 

問題は、次の4つの独立した要素をしなかったということです。ここでは、短い名前と簡単な変更を使用して、ネストされたリストです。

>>> pv = [[0 for col in range(2)] for row in range(2)] 
>>> pv 
[[0, 0], [0, 0]] 
>>> pv[0][1] = "new" 
>>> pv 
[[0, 'new'], [0, 0]] 
>>> pv[1][0] = "abc" 
>>> pv 
[[0, 'new'], ['abc', 0]] 

んあなたが移動を取得:

ここでやり過ぎたバージョンですか?

Pythonの変数はです。すべて間接:値への参照です。

+0

これは私がPythonで2次元配列を初期化するはずですか?私はJavaから来ているので、これは奇妙に思えます。 – KenBone

+0

Nope;この「重複した」閉鎖で参照されている質問の答えを見てください。 「ImportanceOfBeingErnest」が私にそれを打つとき、私はそれを探していました。 – Prune

関連する問題