Pythonで二次元配列を操作する際には、いくつかの注意点があります。特に、値の代入に関しては、予期せぬ結果を招く可能性があります。
二次元配列の初期化
Pythonで二次元配列を初期化する際には、以下のようなコードを書くことがあります。
dp = [[0,0,0]]*5
しかし、この方法で初期化した場合、一部の要素を変更しようとすると、予期せぬ結果が生じる可能性があります。
dp[0][1] = 60
print(dp) # 出力: [[0,60,0],[0,60,0],[0,60,0],[0,60,0],[0,60,0]]
このように、一部の要素だけを変更しようとしたのに、他の要素も変更されてしまいます。
解決法
この問題を解決するためには、「内包表記」を使用してリストを初期化します。
dp = [[0]*3 for i in range(5)]
dp[0][1] = 60
print(dp) # 出力: [[0,60,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]
この方法で初期化した場合、一部の要素を変更しても他の要素に影響を与えません。
また、numpyを使用すると、さらに簡単に二次元配列を初期化できます。
import numpy as np
dp = np.zeros((5,3))
dp[0,1] = 60
print(dp) # 出力: array([[0., 60., 0.],[0., 0., 0.],[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]])
まとめ
Pythonで二次元配列を扱う際には、初期化の方法に注意が必要です。特に、値の代入に関しては、予期せぬ結果を招く可能性があります。この問題を解決するためには、「内包表記」を使用してリストを初期化するか、numpyを使用して初期化すると良いでしょう。.