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