我有一个Python程序,我想在for循环中创建不同的列表,然后将这些列表存储在另一个列表中以创建一个数组。我拿一个输入列表,修改它并将其附加到存储列表,然后重复。我的问题是,当我更新循环中的下一个列表时,数组中的所有列表也会更新,所以我最终得到一个包含多个相同列表的数组。
array = []
road = [1,0,0,0,0,0,0,0]
array.append(road)
for i in range(0,len(road)-1):
if road[i] == 1:
road[i] = 0
road[i+1] = 1
print(road)
array.append(road)
印刷品(道路)完全符合我的要求
[0, 1, 0, 0, 0, 0, 0, 0]
[0, 0, 1, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0]
[0, 0, 0, 0, 1, 0, 0, 0]
[0, 0, 0, 0, 0, 1, 0, 0]
[0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 1]
但最后一次迭代后的数组包含
[[0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1]]
并在第一次迭代后
[[0, 1, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0]]
当我在for循环中更改列表时,如何阻止数组更新?
答案 0 :(得分:3)
array.append(road)
将此更改为
array.append(road[:])
附加列表的副本。这样,您可以附加多个不同的列表,而不是重复附加的相同列表对象。
答案 1 :(得分:3)
您的问题是<Handling>
。这是创建一个浅表,这是原始的克隆。当你改变其他人时,这会改变。
要避免这种情况,您需要一个新列表。要做到这一点,您可以使用约翰建议的<Handling>
,或者您可以使用array.append(road)
,这可以更容易阅读 - 并且更明显它的作用。
所以,而不是[:]
使用list()
。