所以我有一个列表,在for循环中,我附加了一组结构为列表的坐标,但是一旦返回,它只包含最后生成的坐标,它将替换主列表中的所有其他项。 仔细检查后,每次附加某些内容时,它都会用当前坐标替换主列表中的所有项目。 为什么? 源代码可能不会有帮助,它的确如此。 谢谢! 这里有一些代码:
def createLab(size=16):
maze = createMaze()
answerPath=[]
visual=['o']*(size**2)
pos=[(size**2)/2,(size**2)/2]
lat='north'
for move in maze:
#print move, lat, pos
#print answerPath
answerPath.append(pos)
#answerPath='[%s, %s]' % (answerPath,pos)
if move=='straight':
if lat=='north': pos[1]=pos[1]+size
elif lat=='south': pos[1]=pos[1]-size
elif lat=='east': pos[0]=pos[0]+1
elif lat=='west': pos[0]=pos[0]-1
elif move=='left':
if lat=='north': pos[1]=pos[1]-1; lat='west'
elif lat=='south': pos[1]=pos[1]+1; lat='east'
elif lat=='east': pos[0]=pos[0]+size; lat='north'
elif lat=='west': pos[0]=pos[0]-size; lat='south'
elif move=='right':
if lat=='north': pos[1]=pos[1]+1; lat='east'
elif lat=='south': pos[1]=pos[1]-1; lat='west'
elif lat=='east': pos[0]=pos[0]-size; lat='south'
elif lat=='west': pos[0]=pos[0]+size; lat='north'
#print pos
#print; print
return answerPath, maze, pos
答案 0 :(得分:1)
您正在循环之前创建一个pos
列表,并且您反复将pos
完全相同的answerPath
追加到pos
,并修改相同的{{1}一遍又一遍。
作为解决方案,在每次迭代开始时创建一个新的pos
,使用切片表示法制作浅表副本:
def createLab(size=16):
maze = createMaze()
answerPath=[]
visual=['o']*(size**2)
pos=[(size**2)/2,(size**2)/2]
lat='north'
for move in maze:
pos = pos[:] #pos is now a new list with the same values as the previous pos
#Alternatively: pos = list(pos)
answerPath.append(pos)
if move=='straight':
if lat=='north': pos[1]=pos[1]+size
elif lat=='south': pos[1]=pos[1]-size
elif lat=='east': pos[0]=pos[0]+1
elif lat=='west': pos[0]=pos[0]-1
elif move=='left':
if lat=='north': pos[1]=pos[1]-1; lat='west'
elif lat=='south': pos[1]=pos[1]+1; lat='east'
elif lat=='east': pos[0]=pos[0]+size; lat='north'
elif lat=='west': pos[0]=pos[0]-size; lat='south'
elif move=='right':
if lat=='north': pos[1]=pos[1]+1; lat='east'
elif lat=='south': pos[1]=pos[1]-1; lat='west'
elif lat=='east': pos[0]=pos[0]-size; lat='south'
elif lat=='west': pos[0]=pos[0]+size; lat='north'
return answerPath, maze, pos
如果您的示例和我的pos
实际上发生了什么,我建议您阅读Wesley Chun's excellent slides on Python's Memory Model。
答案 1 :(得分:0)
没有代码,我们无法真正帮助你。从您的描述中,听起来好像您没有将新坐标附加到列表中,而是写在同一列表上。
请向我们提供相关代码。
在代码中尝试类似.append的内容。例如。
list = [one,two,three]
list.append(4)
打印(列表)
print现在应该为您提供以下结果。
一,二,三,四
我希望这对你有所帮助。