在Python中向二维列表添加元素

44 投票
3 回答
136135 浏览
提问于 2025-04-17 04:11

我在使用Python的时候遇到了一种我觉得很奇怪的情况,想请人帮我解释一下。

我创建了一个空的二维列表。

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 个回答

-3

我来这里是想看看怎么往一个二维数组里添加一个项目,但这个帖子标题有点误导,因为它其实是在讨论添加时遇到的问题。

我找到的往二维列表里添加内容的最简单方法是这样的:

list=[[]]

list.append((var_1,var_2))

这样做会在列表里添加一个包含两个变量 var_1 和 var_2 的条目。希望这对你有帮助!

19

[[]]*3[[], [], []] 是不一样的。

这就好像你说:

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

换句话说,这三个列表的引用其实都是指向同一个列表实例。

72

你没有创建三个不同的空列表。你只创建了一个空列表,然后用这个相同的空列表创建了三个引用。要解决这个问题,可以用下面的代码:

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]]

撰写回答