在Python中向二维列表添加元素
我在使用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]]