megaList = []
clmsArrow = [[3],[2,3,4],[1,3,5],[3],[3],[3],[3]]
def columnState(y,amnt):
"-1 for all values in a list of lists"
megaList.append(y)
print(y)
for i in range(len(y)):
for j in range(len(y[i])):
y[i][j] -= 1
if y[i][j] == 0:
y[i][j] = 5
if amnt != 1:
return columnState(y,amnt-1)
columnState(clmsArrow,5)
print('\n')
for x in megaList:
print(x)
''Output''
[[3], [2, 3, 4], [1, 3, 5], [3], [3], [3], [3]]
[[2], [1, 2, 3], [5, 2, 4], [2], [2], [2], [2]]
[[1], [5, 1, 2], [4, 1, 3], [1], [1], [1], [1]]
[[5], [4, 5, 1], [3, 5, 2], [5], [5], [5], [5]]
[[4], [3, 4, 5], [2, 4, 1], [4], [4], [4], [4]]
[[3], [2, 3, 4], [1, 3, 5], [3], [3], [3], [3]]
[[3], [2, 3, 4], [1, 3, 5], [3], [3], [3], [3]]
[[3], [2, 3, 4], [1, 3, 5], [3], [3], [3], [3]]
[[3], [2, 3, 4], [1, 3, 5], [3], [3], [3], [3]]
[[3], [2, 3, 4], [1, 3, 5], [3], [3], [3], [3]]
为什么我不能正确地写出全局变量(list)?我只得到相同的第一个函数输入乘以5
正如在函数内部的输出中看到的,一切正常,但是当我尝试将相同的变量添加到函数外部的列表时,出现了一些错误
这是因为您不断地将引用添加到
y
中的mega_list
。如果你改变y
,你也会改变所有对y
的引用。例如:哪个指纹
注意
b
是如何改变的,尽管我只改变了a
。这是因为b
包含到a
的引用,而不是副本。你知道吗要在代码中修复此问题,只需将其添加到函数的开头
您还需要添加
你之所以需要
deepcopy
而不是简单地做y[:]
,是因为你的y
是嵌套列表,即它里面的所有列表也只是对其他列表的引用,这些列表也需要复制。你知道吗最后,返回到原始值的原因是,您使
amnt
等于5
,如果您运行if5
次函数,则函数不会执行任何操作,因为所以他们正在改变,他们只是回到他们开始的地方。如果你跑了
例如,您将看到更改,即
相关问题 更多 >
编程相关推荐