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

2024-07-05 11:30:42 发布

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

我正在用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


Tags: in游戏编辑列表forrangewidthlevel
1条回答
网友
1楼 · 发布于 2024-07-05 11:30:42

您正在一次又一次地将同一个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()用复制的值创建一个新的列表对象

相关问题 更多 >