更改2D列表中的元素会更改整个列中的元素

时间:2020-07-14 05:48:01

标签: python-3.x multidimensional-array

我最近参加了竞争性编程比赛,但遇到了一个问题。问题是艾达·金。 [问题链接] [1]:https://www.codechef.com/JULY20B/problems/ADAKING

我对这个问题的解决方法是,如果我们从顶部开始在板上留出k个空格供国王使用,然后用障碍物填补其余的空间,那么国王只能移动k个单元格。逻辑证明是正确的,但是在我编写的代码中,我很难将第一行的第一个正方形更改为包含代表国王的“ O”,程序有时将第一列的所有元素更改为“ O”或前两个。与“。”相同的故事用于表示空正方形。有人可以看看我的代码并提出任何更正建议

x=['X' for __ in range(8)]
dot=['.' for ___ in range(8)]
t=int(input())
for _ in range(t):
    arr=[]
    for i in range(8):
        arr+=[x]
    k=int(input())
    row=k//8
    extra=k%8
    for i in range(row):
        arr[i]=dot
    for j in range(extra):
        arr[row][j]='.'
    arr[0][0]='O'
    for i in arr:
        print(*i)

1 个答案:

答案 0 :(得分:0)

您遇到list mutability的问题。解决问题的一种方法是使用[:]复制列表。因此,用arr+=[x[:]]arr[i]=dot[:]替换这两行。