输出是数字列表而不是一个数字

The output is list of numbers instead of one number

我 运行 遇到了这个问题,我对 Python 的这种用法很陌生,我希望有人能帮助我解决这个问题。 我有一个使用 RungeKutta 算法的代码。 正如我所做的 print(vH),它会打印:

[70, 98.72259439054349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

当我写 print(vH) 时,我怎么能输出 98.72259439054349 呢? 这是代码的 RungeKutta 部分 nrk=300。使用 nrk 我们得到准确的输出,但是如您所见,使用此代码我们在输出中有 300 个零。

def rk4(dH_func, H0, A, B, alpha, b, rho_de0, rho_dm0, z0, z1, nrk):

        if dH_func != False and drho_dm_func != False and drho_de_func != False :
           vH = [0] * (nrk + 1)

           h = (z1 - z0) / float(nrk)
           vH[0] = H = H0

           for i in range(1, nrk + 1):
               k1_H = h * dH_func(z, H, rho_de, rho_dm)

               k2_H = h * dH_func(z + 0.5 * h, H + 0.5 * k1_H, rho_de + 0.5 * k1_rho_de, rho_dm + 0.5 * k1_rho_dm)

               k3_H = h * dH_func(z + 0.5 * h, H + 0.5 * k2_H, rho_de + 0.5 * k2_rho_de, rho_dm + 0.5 * k2_rho_dm)

               k4_H = h * dH_func(z + h, H + k3_H, rho_de + k2_rho_de, rho_dm + k2_rho_dm)

               vH[i] = H = H + (k1_H + k2_H + k2_H + k3_H + k3_H + k4_H) / 6

               return vH

在你的函数中你写:

for i in range(1, nrk + 1):
    # ...
    return vH

所以这意味着 在第一次迭代结束时,你立即return结果。

如果你想让函数return结果所有迭代完成后,你应该写在return vH 外面 for 循环的主体,例如:

for i in range(1, nrk + 1):
    # ...
return vH

如果您只想打印第 second 项,您应该打印它:

print(vH<b>[1]</b>)