【问题标题】:weird result when filling a matrix one array at a time in python在python中一次填充一个数组时出现奇怪的结果
【发布时间】:2021-03-15 18:28:59
【问题描述】:

我正在尝试以一种直接(可能效率不高)的方式在 python 中填充矩阵:

coord = [0]*3
coords = [[0]*3]*4

for i in range(4):
    for j in range(3):
        coord[j]= i
    coords[i] = coord
    

我希望“坐标”的输出为 [[0,0,0],[1,1,1],[2,2,2],[3,3,3]]

但我得到的是 [[3, 3, 3], [3, 3, 3], [3, 3, 3], [3, 3, 3]]

是我的矩阵代数不好,还是我对 python 有什么不明白的地方?

【问题讨论】:

标签: python arrays matrix indexing


【解决方案1】:

产生这种结果的原因是每个i coords[i] 都会存储对同一个对象的引用。因此修改coord 会导致修改coords 中的每个项目。

在 Python 中,您通常不想提前声明列表大小。您应该只声​​明一个空列表,然后将新项目附加到它。

像这样重构你的代码会给你想要的输出

coords = []
for i in range(4):
    coords.append([i]*3)
print(coords)

【讨论】:

    猜你喜欢
    • 2017-12-05
    • 2018-06-13
    • 2011-11-28
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2013-12-19
    • 1970-01-01
    相关资源
    最近更新 更多