2016-11-22 179 views
0

我必须将同一个列表追加到另一个列表中多次,然后只修改其中的一个。 我试图将同一个列表追加到另一个列表

list_a = [] 
list_b = [0,0,0] 
for x in range(3): 
    list_a.append(list_b) 

但问题是,如果我尝试

list_a[0][0] = 1 

它修改list_a[1][0]list_a[2][0]也。 我该如何避免这种情况?

+2

'list_a.append(list_b [:])' - 追加拷贝' list_b'而不是原来的 – khelwood

+0

真的很感谢你! @khelwood –

+0

“我必须将同一列表追加到另一个不止一次” - 现在,您已经多次向另一个追加了*相同的列表*,这就是问题所在。您需要制作多个列表,而不是重复使用同一个列表。 – user2357112

回答

0

使用以下命令:

list_a = [] 
list_b = [0,0,0] 
for x in range(3): 
    list_a.append(list_b[:]) 
1

更好地创建像这样的列表,如果你想要的是创建空列表与所有0做法较为:

my_list = [[0]*3 for _ in range(3)] 

我们来验证结果是否它有与否相同的问题:

>>> my_list 
[[0, 0, 0], [0, 0, 0], [0, 0, 0]] 
>>> my_list[0][0] = 1 
>>> my_list 
[[1, 0, 0], [0, 0, 0], [0, 0, 0]] 
#^  ^  ^
# Yipee! value changed only once 

要知道你的代码不是窝检查:Python list of lists, changes reflected across sublists unexpectedly

0

您正在追加list_b三次,所以您要修改的是实际的list_b对象。你想要做的就是让一个浅拷贝,这像这样

list_a.append(list(list_b)) 

完成或这样

list_a.append(list_b[:]) 
相关问题