Python列表分配不起作用

克里斯·阮

因此,我有一个列表,在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
她的马

你正在创建一个pos循环之前列表,并要追加完全相同的posanswerPath一遍又一遍,并修改同一个pos一遍又一遍。

作为解决方案,请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关于Python的Memory Model的出色幻灯片

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python变量分配不起作用

来自分类Dev

Python洗牌列表不起作用

来自分类Dev

python中的相交列表不起作用

来自分类Dev

Python 2.7。迭代列表不起作用

来自分类Dev

Python 列表 isalpha 不起作用

来自分类Dev

numpy分配不起作用

来自分类Dev

财产分配不起作用

来自分类Dev

功能分配不起作用

来自分类Dev

分配内存不起作用

来自分类Dev

分配值不起作用

来自分类Dev

Python列表副本在python 3.6中不起作用

来自分类Dev

下拉列表不起作用?

来自分类Dev

列表样式不起作用

来自分类Dev

下拉列表不起作用

来自分类Dev

嵌套列表不起作用

来自分类Dev

列表程序不起作用

来自分类Dev

列表理解不起作用

来自分类Dev

反向打印列表不起作用-Python 3x

来自分类Dev

用于链接列表的Mergesort的Python实现不起作用

来自分类Dev

Python:打印列表时,append()函数不起作用?

来自分类Dev

Python defaultdict,计数列表不起作用

来自分类Dev

弹出并附加到新列表在 python 中不起作用

来自分类Dev

Python:当矩阵高度> 256时,使用numpy的原子分配进行迭代分配的转换不起作用

来自分类Dev

Python:当矩阵高度> 256时,使用numpy进行的原子分配与迭代分配的转换不起作用

来自分类Dev

协变分配不起作用

来自分类Dev

简单变量分配不起作用

来自分类Dev

C ++ int分配不起作用

来自分类Dev

Swift中的可选分配不起作用?

来自分类Dev

DataTable ItemArray分配不起作用