编辑列表列表中的单个值会产生多个已编辑的值

时间:2014-05-25 21:50:19

标签: python arrays list

我正在与pygame制作游戏,但我遇到了问题。下面的函数应该列出一个列表,根据墙/楼层包含1和0。但是,当我尝试编辑单个图块时,整个列都会更改。

def createDefault(width,height,tileW,tileH):
    level = []
    mid = []
    level.append([1]*(width/tileW))
    mid.append(1)
    for i in range((width - (tileW * 2)) / tileW):
        mid.append(0)
    mid.append(1)
    for i in range((height - (tileH * 2)) / tileH):
        level.append((mid))
    level.append([1]*(width/tileW))
    return level

level = createDefault(640,640,64,64)
level[2][4] = 1
print level  

打印(美化):

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

如您所见,在数组的每个列表中,值4已更改为1.如何仅编辑列表2中的值,字符4?

1 个答案:

答案 0 :(得分:0)

您一遍又一遍地将相同的单mid列表追加到level

for i in range((height - (tileH * 2)) / tileH):
    level.append((mid))

添加(浅)副本:

for i in range((height - (tileH * 2)) / tileH):
    level.append(list(mid))

其中list()创建一个包含复制值的新列表对象。