【问题标题】:Python updating lists error! List will not update inside while loopPython更新列表错误!列表不会在while循环内更​​新
【发布时间】:2017-03-04 10:05:43
【问题描述】:
grid_height = 4
grid_width = 5
cell = [0, 1]
OFFSETS = (1, 0)

col = []

while (cell[0] < grid_height) and (cell[1] < grid_width):
    print cell
    col.append(cell)
    cell[0] += OFFSETS[0]
    cell[1] += OFFSETS[1]

print col

因此,对于这个 Python 代码,我尝试更新“单元格”列表并将每个新值存储到列表“col”中。但是,如果您在 Python 中运行此代码,则打印出的“单元格”的值正是我想要的值,但是当我打印出“col”时,它只是不断重复最后一个不需要的值,“单元格”的超出范围的值。我认为这不是范围问题,因为 while() 不会在 Python 中创建新范围。

请帮忙!!这可能是一个我在代码中找不到的非常愚蠢的错误!

【问题讨论】:

    标签: python arrays list while-loop scope


    【解决方案1】:

    您将四个 cell 副本附加到 col。请注意,您没有复制 cell 的值:您复制了对象引用!因此,您在 col 中有四个指向原始 cell 的指针。每次更新 cell 时,更新都会影响每个引用……它们都指向同一个对象。

    您似乎想要一份 cell 的副本。只需更改一行并要求一个新列表:

    col.append(list(cell))
    

    现在你得到了想要的输出:

    [0, 1]
    [1, 1]
    [2, 1]
    [3, 1]
    [[0, 1], [1, 1], [2, 1], [3, 1]]
    

    【讨论】:

    • 或者你可以使用cell[:]
    • 非常感谢!我现在明白了!
    猜你喜欢
    • 1970-01-01
    • 2017-12-07
    • 2012-04-08
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多