Pythonで2次元配列
このあいだエントリ書いてて今更気づいたんですが、pythonで2次元配列の初期化って、
a = [[0]*3]*3
とかだとだめなんですね。
同じオブジェクトのコピーになってしまうので、どこかに要素を設定すると、複数箇所に同じ値が設定されてしまう。
リスト内包表記を使って書く手もありますが、numpyを使うのが正しい形なんだろうか
つらつらとサンプルを書いてみた
# coding=utf-8 # pythonで2次元配列 # リストの初期化 a = [0]*3 # [0, 0, 0] # 2次次元配列の初期化? a = [[0]*3]*3 # [[0, 0, 0], [0, 0, 0], [0, 0, 0]] # でも要素を設定すると、おかしくなる(複数箇所に設定されてしまう) a[0][0] = 1 # [[1, 0, 0], [1, 0, 0], [1, 0, 0]] # リスト内包表記を使って2次元配列を作る a = [[0 for j in range(3)] for i in range(3)] # [[0, 0, 0], [0, 0, 0], [0, 0, 0]] # 要素を設定してもおかしくならない a[0][0] = 1 # [[1, 0, 0], [0, 0, 0], [0, 0, 0]] # numpyを使う from numpy import * a = zeros((3, 3)) #[[ 0. 0. 0.] # [ 0. 0. 0.] # [ 0. 0. 0.]] a[0][0] = 1 #[[ 1. 0. 0.] # [ 0. 0. 0.] # [ 0. 0. 0.]]