python这个为什么循坏内外的打印的列表结果不一样

img


代码如下

varList = []
var =[[1,1],[1,2],[1,3]]
var0= [[1,1],[1,2],[1,3]]
#建立绘图函数makeShape
def makeShape(var,var0):
    for i in range(1,28):
        for j in range(1,28):
            if not([i,j] in var0) and ([i+1,j] in var0 or [i-1,j] in var0 or [i,j+1] in var0 or [i,j-1] in var0):
                var.append([i,j])
                varList.append(var)
                print(varList)
                var.pop()
    return varList
makeShape(var,var0)
print(varList)

这个循环里print的最后一次varlist和最后return出来的varlist为什么不一样?显然return出来的是错误的不是预期的,而循环内print的是正确的。第一次问,有劳了

你好,return出来的和最终打印出来的是一致的,循环中打印出来不一致是print在pop函数之前导致;

img

因为你内层的打印print函数位置没有放正确, print(varList) 应该放在var.pop()代码行的下面,输出结果才会一致。

img

pop()的原因:

varList = []
var =[[1,1],[1,2],[1,3]]
var0= [[1,1],[1,2],[1,3]]
#建立绘图函数makeShape
def makeShape(var,var0):
    for i in range(1,28):
        for j in range(1,28):
            if not([i,j] in var0) and ([i+1,j] in var0 or [i-1,j] in var0 or [i,j+1] in var0 or [i,j-1] in var0):
                var.append([i,j])
                varList.append(var)
                var.pop()
                print('In::',varList)
                #var.pop()
    return varList

makeShape(var,var0)
print('Out:',varList)

#输出:
In:: [[[1, 1], [1, 2], [1, 3]]]
In:: [[[1, 1], [1, 2], [1, 3]], [[1, 1], [1, 2], [1, 3]]]
In:: [[[1, 1], [1, 2], [1, 3]], [[1, 1], [1, 2], [1, 3]], [[1, 1], [1, 2], [1, 3]]]
In:: [[[1, 1], [1, 2], [1, 3]], [[1, 1], [1, 2], [1, 3]], [[1, 1], [1, 2], [1, 3]], [[1, 1], [1, 2], [1, 3]]]
Out: [[[1, 1], [1, 2], [1, 3]], [[1, 1], [1, 2], [1, 3]], [[1, 1], [1, 2], [1, 3]], [[1, 1], [1, 2], [1, 3]]]