【问题标题】:Python add a list to another list as single entry [duplicate]Python将一个列表作为单个条目添加到另一个列表[重复]
【发布时间】:2017-05-09 23:14:40
【问题描述】:

这里的目标是得到一个列表`[1,2,3,4],并将它原样添加到另一个列表中;所以我可以有一个列表列表

masterlist = [[1,2,3,4],[5,6,7,8],.....]

但我无法做到这一点。

我确实尝试了追加,它有效,但它复制了对我追加的那个列表的引用,它不会复制值,所以如果我清空我追加的列表,我最终会清除整个内容.

list1 = [1,2,3,4]

masterlist.append(list1)

del list1[:]
list1 = [5,6,7,8]

masterlist.append(list1)

这导致 masterlist 有 2 个列表,但它们本质上是相同的,所以它看起来像这样:

[[5,6,7,8],[5,6,7,8]]

虽然我想要[[1,2,3,4],[5,6,7,8]]

我确实尝试使用扩展,但这会将当前列表的每个元素添加为另一个列表中的单个条目,所以我最终得到了

[1,2,3,4,5,6,7,8]

您如何最终在列表中添加列表的内容本身,而不是参考?

编辑:这不是与深拷贝或浅拷贝有关的问题;另一个链接的问题似乎相似,但没有解决我的问题。我在这里看到了一个非常适合我的情况的解决方案

【问题讨论】:

  • 如果你想附加一个副本,make a copy。 Python 不会像 C++ 那样隐式地在任何地方复制。
  • 你为什么使用del?无论如何,您可能有兴趣导入 copy 并使用它来制作 list1 的副本以附加。
  • 另外,您发布的代码不会产生您描述的输出,因为list1 = [5,6,7,8] 创建了一个新的列表对象。您需要习惯哪些操作会创建一个新对象以及哪些操作会修改现有对象。
  • 我刚刚了解到 Python 不像 C++ 那样工作;假设是将一个列表添加到另一个列表中,隐式地在该列表对象中创建一个列表并将每个元素放入其中。感谢您的澄清
  • 不确定为什么将其标记为重复:其他问题与此完全不同。作为其他人寻找像我这样的问题的答案的证据,很可能会找到这个答案。就像我没有看到与我的案例相关的其他两个问题一样。从学术的角度来看,它们可能是相关的,但它们不会澄清我所做的事情为什么会发生,也不会解释如何解决它。出于对 dawg 的尊重,你甚至不应该考虑关闭它。

标签: python list


【解决方案1】:

你可以这样做:

>>> masterlist = [[1,2,3,4],[5,6,7,8]]
>>> list1 = [1,2,3,4]
>>> masterlist[len(masterlist):]=[list1[:]]
>>> del list1
>>> masterlist
[[1, 2, 3, 4], [5, 6, 7, 8], [1, 2, 3, 4]]

或者,

masterlist.append(list1[:])

或者,仅限 Python3:

masterlist.append(list1.copy())

【讨论】:

  • 或者只是masterlist.append(list1[:]) ...切片/复制发生在附加到主列表的匿名对象(引用)上。
  • 就是这样!所以当我使用[:] 时,我实际上是在添加列表本身的值,而不是对它的引用。谢谢!
  • masterlist += [list1[:]]
猜你喜欢
  • 2010-11-20
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
  • 2022-08-02
  • 1970-01-01
相关资源
最近更新 更多