Pythonで最初に指定した数の要素を持つリストを作りたかったけど、ハマったのでφ(..)メモメモ
試して載せているのはPython2.7での結果ですが、Python3.6でも同じ結果でした。
いつもは、次のようにコードを書いて作ってます(・_・;)
>>> test_list = [0] * 10
>>> print test_list
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
これで指定した数の要素数(10コ)を持つリストが作れました!
でも、今回私が作りたかったのは空のリストを10コ持つリスト。(二次元配列)
だから、こうしてみました!
>>> test_list = [[]] * 10
>>> print test_list
[[], [], [], [], [], [], [], [], [], []]
これで出来た!と思ったらなんか挙動がおかしい(´・ω・`)(´・ω・`)(´・ω・`)
調べて見るとこんなんなってた!
>>> test_list = [[]] * 10
>>> print test_list
[[], [], [], [], [], [], [], [], [], []]
>>> test_list[0].append(1)
>>> print test_list
[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
えっ?えっ?最初の要素にappendしたから、最初の要素だけ1が追加されるんじゃないの??
同じインスタンスを参照してる?のかな?いつもの作り方は実は間違ってる??
確かめてみると、
>>> test_list = [0] * 10
>>> print test_list
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> test_list[0] = 1
>>> print test_list
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
間違ってないみたいです。
うむ。よくわからない(・_・;)
とりあえず、二次元配列を作るときは違う書き方をしないと駄目みたいですね
>>> for i in range(10):
... test_list.append([])
...
>>> print test_list
[[], [], [], [], [], [], [], [], [], []]
>>> test_list[1].append(0)
>>> print test_list
[[], [0], [], [], [], [], [], [], [], []]
これならいい感じ!
細かい話はここに載ってました\(^o^)/
No responses yet