我必须多次将同一个列表附加到另一个列表,然后只修改其中一个。 我试过了
my_range
但问题是,如果我尝试
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]
。
我怎么能避免这种情况?
答案 0 :(得分: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
答案 1 :(得分:0)
使用以下内容:
list_a = []
list_b = [0,0,0]
for x in range(3):
list_a.append(list_b[:])
答案 2 :(得分:0)
您正在追加list_b三次,因此您要修改的是实际的list_b对象。你想要做的是做一个浅拷贝,这可以这样做
list_a.append(list(list_b))
或者像这样
list_a.append(list_b[:])