首页 > 解决方案 > 更改列表中倒数第二个条目会更改所有前面的条目

问题描述

我正在尝试编写的代码包括以相反顺序填充列表的 for 循环:首先设置最后一个条目,然后根据第 (t+1) 个条目设置第 t 个条目,向后迭代直到它到达第 0 个条目。不幸的是,在倒数第二个等于倒数第二个之前,我一直遇到所有条目的奇怪问题。

奇怪的是,即使没有 for 循环,我也设法重现了这个问题。

此示例中的条目是长度为 3 的列表,因为在我的实际工作中就是这样。如果我只是将条目设为整数,问题就会消失。

def bet(p):
    bet=[[0,0,0]]*p
    bet_end=[]
    for k in range(0,3):
        bet_end.append(1)
    bet[p-1]=bet_end
    for k in range(0,3):
        bet[p-2][k]=2
    return bet

test=bet(5)

我希望输出是

[[0,0,0],[0,0,0],[0,0,0],[2,2,2],[1,1,1]]

相反,我得到

[[2,2,2],[2,2,2],[2,2,2],[2,2,2],[1,1,1]]

为什么第 0 条、第 1 条和第 2 条条目会受到第 3 条条目更改的影响?

标签: pythonfor-loop

解决方案


更改此行

bet=[[0,0,0]]*p

至,

bet=[[0,0,0] for i in range(p)]

输出:

>>> bet(5)
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [2, 2, 2], [1, 1, 1]]

为什么?

阅读此处了解如何正确初始化列表。


推荐阅读