AT's Blog

趣味のプログラミング、ギター、音楽とかとか

【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]]

ググったところ、こんな書き方ができるそうです。

sonickun.hatenablog.com

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]]

結論としては、リスト内包表記を使った生成が正しかったようです。