2016-11-04 17 views
0

私はPythonでこの2つの異なる2次元マトリックス初期化の方法の違いは何ですか?2次元配列をPythonで初期化しますか?

m =[] 
    K = [] 
    for x in range(0,W+1): 
     m.append(0) 
    for x in range(0,n+1): 
     K.append(m) 

l = [] 
    for j in range(0,n+1): 
     l.append([]) 
     for i in range(0,W+1): 
      l[j].append(0)) 

IがLとKを印刷しようとしたときの両方が同じ答えを与えたが、私はコードでそれを実現しようとしたときにプログラムの出力が変更されました。

前のもの(K)は間違った答えを出したが、後でプログラムに実装したとき(l)は正解を出した。

+0

あなたはもっと明示的にそれを達成しましたが、あなたは重複している人々のリストに同じ問題があります。 – ShadowRanger

答えて

1

最初の例では、リストmに同じ参照をkに保存しています。 mの変更はすべての参照に反映されます。

次に、lに新しいリストを作成しています。したがって、一方の変化は他方の変化とは無関係です。

あるいは、リストを初期化する簡単な方法が通りである:異なる基準を持っ

>>> row, columns = 2, 3 
>>> my_list = [[0]*columns]*row 
>>> my_list 
[[0, 0, 0], [0, 0, 0]] 
>>> my_list[0][1] = 1 # changing value 
>>> my_list 
[[0, 1, 0], [0, 1, 0]] 
# ^  ^Reflected in all 
  • :(最初のアプローチと同様に)listに同一符号を持っ

    • する通りであります(2番目のアプローチと同様)は次のようになります。

      >>> my_list = [[0]*columns for i in range(row)] 
      >>> my_list 
      [[0, 0, 0], [0, 0, 0]] 
      >>> my_list[0][1] = 1 # changing value 
      >>> my_list 
      [[0, 1, 0], [0, 0, 0]] 
      # ^only one value is changed 
      
  • 関連する問題