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 回答