我有一个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循环中更改列表时,如何阻止数组更新?你知道吗
将此更改为
添加列表的副本。这样就可以附加多个不同的列表,而不是重复附加同一个列表对象。你知道吗
你的问题是
array.append(road)
。这是创建一个浅表列表,它是原始列表的克隆。当你改变其他人的时候,这个就会改变。你知道吗为了避免这种情况,你需要一个新的列表。要做到这一点,您可以按照John的建议使用
[:]
,也可以使用list()
,这样更容易阅读,而且它的作用也更明显。你知道吗因此,不要使用
array.append(road)
,而要使用array.append(list(road))
。你知道吗相关问题 更多 >
编程相关推荐