【问题标题】:Appending element to a 3-dimensional list将元素附加到 3 维列表
【发布时间】:2016-01-21 11:59:46
【问题描述】:

我在将新元素附加到 3 维列表时遇到问题。它不是在一个地方(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], []], [[], [], []]]

【问题讨论】:

标签: python python-3.x


【解决方案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 的情况下,[] 被评估一次,包装为[[]],然后被复制。

【讨论】:

  • 谢谢。所以基本上问题在于创建列表。我对这个问题的解决方法如下:threeDimList = [[[] for i in range(3)] for i in range(3)]
猜你喜欢
  • 2021-10-06
  • 2017-06-23
  • 2021-10-02
  • 2023-03-09
  • 2014-02-22
  • 1970-01-01
  • 2020-09-02
  • 2014-06-10
  • 1970-01-01
相关资源
最近更新 更多