1

Pythonではlist、フォームの指定された数のサブリストを含む必要があり[0,0]ます。例えば:

>>> myLen = 2
>>> myList = [[0,0]] * myLen
>>> myList
[[0, 0], [0, 0]]

各サブリストは常に同じ要素を指していることが判明したため、一方を変更すると、もう一方も自動的に変更されます。

>>> myList[0][0] = 2
>>> myList
[[2, 0], [2, 0]]

何故ですか?この動作を回避するにはどうすればよいですか?

4

2 に答える 2

2

リスト内包表記を使用します。

myList = [[0,0] for _ in range(myLen)]

個別のサブリストを作成します。

リストを乗算すると、内部リストはコピーされず、サブリストへの参照のみがコピーされます。あなたは本質的にこれをします:

myList = [[0,0]]
for _ in range(myLen - 1):
    myList.append(myList[0])

一方、リスト内包表記は、ループの反復ごとにサブリストを作成する式を実行するため、実行ごとに完全に新しいリストが作成されます。

myList = []
for _ in range(myLen):
    myList.append([0,0])
于 2013-03-20T14:42:15.020 に答える
0

多分あなたはnumpyを使うことができます:

import numpy
matrix = numpy.zeros(myLen, 2)

ソース: http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html

于 2013-03-20T14:44:03.323 に答える