我必须将同一个列表追加到另一个列表中多次,然后只修改其中的一个。 我试图将同一个列表追加到另一个列表
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]
也。 我该如何避免这种情况?
我必须将同一个列表追加到另一个列表中多次,然后只修改其中的一个。 我试图将同一个列表追加到另一个列表
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]
也。 我该如何避免这种情况?
使用以下命令:
list_a = []
list_b = [0,0,0]
for x in range(3):
list_a.append(list_b[:])
更好地创建像这样的列表,如果你想要的是创建空列表与所有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
您正在追加list_b三次,所以您要修改的是实际的list_b对象。你想要做的就是让一个浅拷贝,这像这样
list_a.append(list(list_b))
完成或这样
list_a.append(list_b[:])
'list_a.append(list_b [:])' - 追加拷贝' list_b'而不是原来的 – khelwood
真的很感谢你! @khelwood –
“我必须将同一列表追加到另一个不止一次” - 现在,您已经多次向另一个追加了*相同的列表*,这就是问题所在。您需要制作多个列表,而不是重复使用同一个列表。 – user2357112