将列表追加到列表时出现意外输出

时间:2019-07-05 19:29:57

标签: python python-3.x

这是我要解决的问题代码的非常简化的版本。

我尝试使用print(x)调试代码。但是我不明白为什么世界上[6,1]会反复添加到攻击坐标后面。任何帮助将不胜感激,因为它的黄金重量。

obstaclecoordinates=[]
coordinatesofattack=[]
n=5
x=[1,1]
while x not in obstaclecoordinates:
    coordinatesofattack.append(x)
    x[0]+=1
    print(x)
    if x[0]>n:
        break
    else:
        continue
print(coordinatesofattack)

期望的输出:[[1,1],[2,1],[3,1],[4,1],[5,1],[6,1]]

实际输出:[[6,1],[6,1],[6,1],[6,1],[6,1]]

1 个答案:

答案 0 :(得分:2)

如评论中所述,您不断修改添加的列表。您需要在while循环中创建一个副本。

obstaclecoordinates=[]
coordinatesofattack=[]
n=5
x=[1,1]
while x not in obstaclecoordinates:
    coordinatesofattack.append(x[:])
    x[0]+=1
    print(x)
    if x[0]>n:
        break
    else:
        continue
print(coordinatesofattack)