在三维列表中添加新元素时遇到问题。不是在一个地方(threeDimList[1][1]
)追加一个新元素,而是在整行(threeDimList[1][0]
,threeDimList[1][1]
,threeDimList[1][2]
)追加它,下面是我的代码:
threeDimList = [[[]]*(3) for i in range(3)]
threeDimList[1][1].append(1)
print(threeDimList)
这给了我:
[[[], [], []], [[1], [1], [1]], [[], [], []]]
而不是:
[[[], [], []], [[], [1], []], [[], [], []]]
最佳答案
问题是[[]] * 3
基本上创建了一个列表,其中包含对同一[]
的三个引用。
你可以这样做:
>>> a = [[] for i in range(3)]
>>> a[0].append(1)
>>> a
[[1], [], []]
>>> b = [[]] * 3
>>> b[0].append(2)
>>> b
[[2], [2], [2]]
在
a
情况下,给定列表理解,[]
将被求值三次,因此每次求值都会在内存中获得一个新的空列表对象。在
b
情况下,[]
被求值一次,包装为[[]]
,然后被复制。