已解决,感谢大家的帮助! 我的数组生成代码引用相同的数组,因此编辑将应用于整个列而不是特定点。
我正在创建一些可以在未来的 Python 程序中使用的函数来处理数组,例如定义它们并显示它们。然而,当我尝试从左到右按顺序设置数组中的值时,我遇到了一个奇怪的错误或故障。由于某种原因,当程序在最后一个 y 值(或实际上在任何值)上设置值时,它会为整个列设置该值,而不是仅设置一个值,即使我只有 2 个循环。这是我的代码:
def gen(xLen, yLen, fill = 0):
mainArr = list()
secArr = list()
for i in range(xLen):
secArr.append(fill)
for i in range(yLen):
mainArr.append(secArr)
return mainArr
def sums(xLen, yLen):
newArr = gen(xLen, yLen)
a = 0
for y in range(yLen):
for x in range(xLen):
newArr[y][x] = a
print(str(x) + ", " + str(y) + " = " + str(a)) #For debugging, what the array SHOULD contain
a += 1
return newArr
(只需使用 print(sums(5, 5))
运行即可)
它不是返回 [[0, 1, 2, 3, 4], ... [20, 21, 22, 23, 24]]
,而是返回一个完整的列表[20, 21, 22, 23, 24]
我真的不知道为什么。
我不想将新列表追加到另一个已包含值的列表中,例如 arr.append([0, 1, 2, 3, 4])
,因为数组已经生成了。
为什么这不起作用???这已经困扰我好几个星期了!
最佳答案
secArr
是对列表的引用。
因此,在 gen
中,您实际上在 mainArr
中放置了 n
次对 secArr
的相同引用。
在 for 中添加一个 print(newArr)
来验证这一点。
您可以运行newArr[0][1] = 1
来查看所有内部列表如何受到影响。
您可以通过创建 secArr
的副本,然后将其附加到 gen
中的 mainArr
来解决此问题,如下所示:
mainArr.append(secArr[:])
关于Python数组值分配故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53439537/