2016-03-25 11 views
1

私はリストのリストを持っており、各リストを反復して更新したい。次のように 私は私のリストを初期化: 繰り返しリストのリストを更新する

my_list = [[0]*n]*n 

私のようなもので、内側のリストを更新する

for i in range(something): 
    for j in range(anotherthing): 
     my_list[i][j] = something 

何が起こるかというと、全リストは、i番目のリストではなく更新されていることであるのみ反復ごとに、例えば[[1,2]、[1,2]]。 私が望むのは、最初の反復で、[[1,2]、[0,0]]で初期化し、[[1,2]、[values]]にすることです。私は間違って何をしていますか?

答えて

3

リスト乗算演算子*はコピーを作成しませんが、同じデータへの複数の参照を作成します。代わりに*を使用してのあなたのリストを初期化するための内包表記を使用することを検討してください:

my_list = [[0 for i in range(n)] for j in range(n)] 
0

はリストのリストを初期化するために、それが正常に動作しますこれを使用してください。

x = [[0]*n for i in range(n)] 

元のコードでは、サブリストのリストも作成されますが、サブリストのすべてが同じオブジェクトを参照しています。

注:私はPython3を使用しています。 2を使用している場合は、range()の代わりにxrange()を使用する必要があります。

関連する問題