【Python】リストを使って初期化された2次元配列を生成する
0で初期化された3x3の2次元配列を、リストを使って生成してみます。
すぐに思いついたのがこちら↓
>>> ls = [] >>> for x in range(0,3): ... tmp = [] ... for y in range(0,3): ... tmp.append(0) ... ls.append(tmp) ... >>> ls [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
リスト内包表記で書けるんじゃね?と思って書き直したのがこちら↓
>>> ls = [[0 for x in range(0,3)] for y in range(0,3)] >>> ls [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
ググったところ、こんな書き方ができるそうです。
ls = [[0]*3]*3
リンク先でも紹介されていますが、インデックスを指定して要素を書き換えると、おかしなことになります。
ls = [[0]*3]*3 >>> ls [[0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> ls[1][2] = 1 >>> ls [[0, 0, 1], [0, 0, 1], [0, 0, 1]]
結論としては、リスト内包表記を使った生成が正しかったようです。