Pythonで2次元配列の静的確保と動的確保
Pythonでデータ分析をするときにどうしても2次元配列を使いたかったのですが、Numpyを使った配列定義がわかりにくくて困っていたところ、友人にNumpyを使わない方法を教えてもらったので載せておきます。個人的にはこの方法が一番シンプルで好きです。
またこの方法なら、2次元以上の多次元配列も定義できます。
2次元配列の静的確保
・悪い例
次のように配列を定義すると、要素を更新すると中身が変になります。
>>> arr = [[0]*3]*5 >>> arr [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> >>> >>> arr[1][2] = 1 >>> arr [[0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 0, 1]]
このように、1つの要素を書き換えたはずなのに、他の要素まで書き換わってしまいます。
・良い例
for文を使ったリスト内包表記で次のように配列を作ります。
>>> arr = [[0 for i in range(3)] for j in range(5)] >>> arr [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> >>> >>> arr[1][2] = 1 >>> arr [[0, 0, 0], [0, 0, 1], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
こうすると、正しく要素を指定できます。
2次元配列の動的確保
配列の動的確保にはappend関数を使います。append関数は引数に指定した要素を配列に追加してくれる関数です。
>>> arr = [[]] >>> arr [[]] >>> >>> arr.append(0) >>> arr [[], 0] >>> >>> arr.append([1,2,3]) >>> arr [[], 0, [1, 2, 3]] >>> >>> arr[0].append(5) >>> arr [[5], 0, [1, 2, 3]]
このように、自在に配列を生成することができます。