避免更新for循环中的嵌套列表

2024-04-19 22:54:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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循环中更改列表时,如何阻止数组更新?你知道吗


Tags: in程序列表forlenifrange数组
2条回答
array.append(road)

将此更改为

array.append(road[:])

添加列表的副本。这样就可以附加多个不同的列表,而不是重复附加同一个列表对象。你知道吗

你的问题是array.append(road)。这是创建一个浅表列表,它是原始列表的克隆。当你改变其他人的时候,这个就会改变。你知道吗

为了避免这种情况,你需要一个新的列表。要做到这一点,您可以按照John的建议使用[:],也可以使用list(),这样更容易阅读,而且它的作用也更明显。你知道吗

因此,不要使用array.append(road),而要使用array.append(list(road))。你知道吗

相关问题 更多 >