提前致谢 - 新编程和SO!我试图将值添加到数组中的特定位置。这是我尝试过的,其中我尝试以格式array [i] [j] = value为初始化数组添加值。它返回错误" IndexError:list index超出范围"。
ydata=[[None]*len(x_values)]*len(unit_id_values)
for i in range (len(x_values)):
for j in range (len(unit_id_values)):
for unit in list_Unit_A:
if unit.filename_integer==x_values[i] and unit.unit_id==unit_id_values[j]:
ydata[i][j]=unit.data_dict[metric]
else:
continue
答案 0 :(得分:0)
尝试打印出适合您的ydata。如果我做了与你的第一行类似的事情,我会得到这个:
>>> ydata = [[None] * 2] * 3
>>> ydata
[[None, None], [None, None], [None, None]]
你的第一个循环实际上正在迭代你的每个内部列表的大小,但如果有意义的话,它会引用外部列表。您的第二个循环是迭代外部列表的大小,但是引用内部列表的元素。所以基本上你有循环/索引翻转。
尝试
ydata[j][i]=unit.data_dict[metric]
而不是
ydata[i][j]=unit.data_dict[metric]
答案 1 :(得分:0)
在您显示的代码段中。
ydata是行大小为unit_id_values和的长度的矩阵 列大小是x_values的长度,但在您的代码中,您使用行索引使用列索引和列访问行,这是错误的,因此导致错误" IndexError:列表索引超出范围,当索引时超出范围。
因此你的代码应该是这样的:
ydata=[[None]*len(x_values)]*len(unit_id_values)
for i in range (len(unit_id_values)): //this is row
for j in range (len(x_values)): // this is column
for unit in list_Unit_A:
if unit.filename_integer==x_values[j] and unit.unit_id==unit_id_values[i]:
ydata[i][j]=unit.data_dict[metric]
else:
continue
或以另一种方式,您也可以这样编写代码:
ydata=[[None]*len(x_values)]*len(unit_id_values)
for i in range (len(x_values)): //this is column
for j in range (len(unit_id_values)): // this is row
for unit in list_Unit_A:
if unit.filename_integer==x_values[i] and unit.unit_id==unit_id_values[j]:
ydata[j][i]=unit.data_dict[metric]
else:
continue