运行 循环后分配给列表元素的垃圾值

Garbage value being assigned to an element of list after running the looop

这是代码的一部分:

import xlrd as xd

import numpy as n

gx = 'dx.xls'

gy = 'dy.xls'

qx = xd.open_workbook(gx)

qy = xd.open_workbook(gy)

qxs = qx.sheet_by_index(0)

qys = qy.sheet_by_index(0)

imx = qxs.nrows

jmx = qys.ncols

pi = round(n.pi , 10)

Tad = pi*.5

x = [[float(0)]*imx]*jmx

for i in range(1,jmx):

          x[i][0]  = x[i-1][0]+qxs.cell_value(0,i-1) 

并且 x[0][0] 的值变为 945.6。

qsx 单元格数据在所有 8.6609 单元格中几乎保持不变。 请帮助我并告诉我我哪里做错了。

编辑:

我正在尝试读取 .xls 文件并使用其包含长度差异 (dx) 的单元格值来获取每个索引处的 x 坐标,我 运行 循环.正如我将列表定义为 x 并启动为 x = [[float(0)]*imx]*jmx。在 运行 代码之后,它没有显示任何错误,但是列表 x[0][0] 中的元素被分配了一个固定值 945.6。这不应该发生,因为我 运行 来自 i=1 的循环因此从 x[1][0] 开始评估并且 x[0][0] 应该保持 0.0qsx 中的所有单元格值都大致相同,即 8.6609.

问题出在这里x = [[float(0)]*imx]*jmx。似乎列表中的所有列表都没有不同,而是同一列表的引用。尝试以这种方式更改 x 初始化,我认为它应该有效:

更新:我已经更改了 i 和 j for 循环的顺序。

x = []
for j in range(jmx):
  x.append([])
  for i in range(imx):
    x[j].append(float(0))

您也可以使用以下语法:

x = [[0.0 for i in range(imx)] for j in range(jmx)]