在三维列表中添加新元素时遇到问题。不是在一个地方(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情况下,[]被求值一次,包装为[[]],然后被复制。

09-06 10:54