附加到Python中的2D列表

时间:2011-10-12 19:37:28

标签: python list

我在Python中遇到了我认为是一种奇怪的行为,如果可能的话,我希望有人解释一下。

我创建了一个空的2D列表

listy = [[]]*3

print listy

[[], [], []]

以下是我所期望的:

listy[1] = [1,2]收益[[], [1,2], []]

listy[1].append(3)收益[[], [1,2,3], []]

但是,当我附加到其中一个空列表时,python会附加到所有子列表,如下所示:

listy[2].append(1)会产生[[1], [1,2,3], [1]]

有人可以向我解释为什么会出现这种情况吗?

3 个答案:

答案 0 :(得分:51)

您尚未创建三个不同的空列表。您已创建一个空列表,然后创建一个新列表,其中包含对该相同空列表的三个引用。要解决此问题,请改用此代码:

listy = [[] for i in range(3)]

现在运行示例代码会得到您可能期望的结果:

>>> listy = [[] for i in range(3)]
>>> listy[1] = [1,2]
>>> listy
[[], [1, 2], []]
>>> listy[1].append(3)
>>> listy
[[], [1, 2, 3], []]
>>> listy[2].append(1)
>>> listy
[[], [1, 2, 3], [1]]

答案 1 :(得分:13)

[[]]*3[[], [], []]不同。

就像你说的那样

a = []
listy = [a, a, a]

换句话说,所有三个列表引用都引用相同的列表实例。

答案 2 :(得分:0)

到这里来看看如何将项目附加到2D数组,但是线程的标题有点误导,因为它正在探索附加问题。

我发现添加到2D列表的最简单方法是这样的:

list = [[]]

  

list.append((var_1,var_2))

这将导致输入包含2个变量var_1,var_2。希望这会有所帮助!