Python数组值分配故障

标签 python arrays list

已解决,感谢大家的帮助! 我的数组生成代码引用相同的数组,因此编辑将应用于整个列而不是特定点。

我正在创建一些可以在未来的 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[:])

有关该主题的更多信息 herehere .

关于Python数组值分配故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53439537/

相关文章:

python & c-c++ 单元程序导致段

python - teardown_request() 如何与 Python-Flask 一起使用?

Javascript 将数组插入对象内部

python - Python 中的列表是否有 Don't Care 值

python - 如何比较 Python 中的两个列表并计算所有匹配项?

c# - 为什么 IList<> 的功能比 List<> 少?

python - 按表示相同值的多个键对字典进行排序

用于通过脚本内的每个函数编写和附加单个 xls 文档的 Python 脚本。目前它覆盖了工作表

java - 为数组长度设置 ArrayIndexOutOfBound 异常

c++ - 无法确定我的递归出错的位置 (c++)