【问题标题】:Python, appending a list to another listPython,将列表附加到另一个列表
【发布时间】:2016-05-13 12:27:01
【问题描述】:

我需要将一个列表附加到一个 2D 列表,以便我可以编辑添加的列表。我有这样的事情:

n = 3
a = [
    ['a', 2, 3],
    ['b', 5, 6],
    ['c', 8, 9]
]
b = [None for _ in range(n)]    # [None] * n
print b
a.append(b)
a[3][0] = 'e'
print a
a.append(b)
a[4][0] = 'f'
print a

我得到的结果是:

[None, None, None]
[['a', 2, 3], ['b', 5, 6], ['c', 8, 9], ['e', None, None]]
[['a', 2, 3], ['b', 5, 6], ['c', 8, 9], ['f', None, None], ['f', None, None]]  

第 4 行中的 e 更改为 f,这是我不想要的。使用[None] * 3 我得到相同的结果。我该如何防止这种情况发生?我检查了how to create a fix size list in pythonpython empty list trick,但它不起作用。

【问题讨论】:

  • 您的公式可以改进:b 不是一个空列表,因为它的长度是 3。

标签: list python-2.7


【解决方案1】:

b“指向”同一个 python 对象

您应该这样做以创建 b 的新副本:

a.append(list(b))

【讨论】:

    【解决方案2】:

    因为你浅拷贝列表而不是深拷贝(参见:What is the difference between shallow copy, deepcopy and normal assignment operation?)。 相反,您可以使用内置模块 copy 执行以下操作:

    import copy
    # replace a.append(b) with the following
    a.append(copy.deepcopy(b))
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-11
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      • 2021-03-17
      • 2022-10-25
      相关资源
      最近更新 更多