我在将新元素附加到三维列表时遇到问题。它不是在一个地方追加新元素(Github
),而是将其附加到整行(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]], [[], [], []]]
答案 0 :(得分:5)
问题在于[[]] * 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
案例中,[]
评估一次,包装为[[]]
,然后复制。