在 Python 中,我想要一个list
包含给定数量的表单子列表[0,0]
。例如:
>>> myLen = 2
>>> myList = [[0,0]] * myLen
>>> myList
[[0, 0], [0, 0]]
事实证明,每个子列表总是指向同一个元素,因此修改一个会自动修改另一个。
>>> myList[0][0] = 2
>>> myList
[[2, 0], [2, 0]]
这是为什么?我该如何避免这种行为?
使用列表推导:
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])
也许你可以使用 numpy:
import numpy
matrix = numpy.zeros(myLen, 2)
来源:http ://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html