在循环中附加到阵列-Python



请参阅此问题的精简版,没有混乱

我正在写一个重力模拟。我的代码的结构是:

  • a solution数组 - 这包含质量系统的(已经计算的)解决方案。由于在Python中求解微分方程的性质,因此所有相关值(每个质量值的位置和速度的每个成分在每个时间值的值)都在solution数组中。

  • 数组masses。这里的对象包含有关每个质量的所有信息,包括我要在下面要更新的数组x_history

  • 否。尺寸d。在这里,我使用2来简单。

我有以下代码:

d = 2
for i in range(len(masses)): #  loop through masses
    for k in range(len(solution)): # loop through solution to obtain values at each timestep
        x = []  #  d dimensional x vector at current timestep
        #  fill the x-vector
        for j in range(d):
            x.append(solution[k][d * i + j])
        masses[i].x_history.append(x)

这个想法只是循环遍历masses数组中的对象,从另一个数组中抽象相关信息(代表向量的x数组),然后将其添加到质量对象中的x_history数组中。问题是(我已经通过调试来检查)行:

masses[i].x_history.append(x)

而不是将i的当前值附加到masses[i].x_history,而是将其附加到群众列表中所有对象的x_history数组中,这意味着在外循环的末尾,质量列表中的每个对象都包含所有信息而不是自己的信息。

有人知道为什么会这样吗?我是意外地矢量化此操作吗?

似乎使循环变得正确,但将值附加到self.mass [i] .x_history处于错误的凹痕位置。您必须将最后两个行语句移动到一个打算(四个空间)的回向。

最新更新