将值添加到初始化数组

时间:2017-05-11 03:03:45

标签: python arrays indexing

提前致谢 - 新编程和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

2 个答案:

答案 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