运行 循环后分配给列表元素的垃圾值
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.0
。 qsx
中的所有单元格值都大致相同,即 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)]
这是代码的一部分:
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.0
。 qsx
中的所有单元格值都大致相同,即 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)]