【问题标题】:Python: Nested List is not replacing values correctly [duplicate]Python:嵌套列表没有正确替换值[重复]
【发布时间】:2021-12-01 22:59:34
【问题描述】:

我有一个只包含 0 的嵌套列表,由 5 x 5 的大小定义,我希望能够使用直接索引将嵌套列表中的特定值设置为 1。这是我目前拥有的解决方案:

    Grid = [[0] * 5] * 5

    ObX = 2
    print(ObX)

    ObY = 3
    print(ObY)

    Grid[ObY][ObX] = 1
    print(Grid)

预期输出:

2

3

[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0 ], [0, 0, 0, 0, 0]]

实际输出:

2

3

[[0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0 ], [0, 0, 1, 0, 0]]

据我所知,它忽略了“ObY”索引,只是决定要替换索引“ObX”处每个列表中的每个值。我做错了什么?

【问题讨论】:

标签: python list indexing replace nested-lists


【解决方案1】:

您创建的列表列表包含 5 次相同的列表,更改一次会更改其所有副本

In [1]: Grid = [[0] * 5] * 5

In [2]: [id(x) for x in Grid]
Out[2]:
[140392398718848,
 140392398718848,
 140392398718848,
 140392398718848,
 140392398718848]

使用它来创建 5 个不同的列表

In [5]: Grid =[[0]*5 for _ in range(5)]


In [6]: [id(x) for x in Grid]
Out[6]:
[140392397938112,
 140392396267776,
 140392397478656,
 140392398276224,
 140392398427200]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 2023-03-27
    • 2018-08-16
    相关资源
    最近更新 更多