如何在python中调用循环内的前一个元素

时间:2014-08-19 05:04:41

标签: python-3.x

我正在尝试这样的事情 -

     for j in range(1,100):
     ej=[]
     rj=[]
     vj=[]
      for i in range(0,10):
       pj=(r(j-1)[i]+v(j-1)[i]*0.01)
       qj=v(j-1)[i]
       rj.insert(i,pj)
       vj.insert(i,qj)
      for i in range(0,10):
       z1=0.5*1*(vj[i]**2)
       ej.insert(i,z1)
       ejtotal=sum(ej)
       print(j,ejtotal)

我希望j循环从1开始,我会事先给出r0v0的值。但是部分r(j-1), v(j-1)无效,它无法理解(j-1)并调用该对象的先前值。有人可以帮忙吗?提前致谢。

1 个答案:

答案 0 :(得分:0)

听起来你的变量中包含数字,例如r0v0,而你正试图使用​​数值计算r(j-1)查找它们。这不起作用,因为Python将r(j-1)解释为尝试使用参数r调用函数j-1。我怀疑您还会发现您的rjvjej值未达到预期效果(他们没有写入r1,{{1 },v1等等,它们只是以“j”结尾的名称。

您应该使用e1值列表,r每个append值的新值。而不是j,你会查找r0。如果您使用r[0],则不会出现问题。

我怀疑你想要这样的东西:

r[j-1]

我通过列表推导替换内部循环来简化了一些事情。通过使用索引r = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] # example r[0] data v = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]] # example v[0] data e = [[]] # no e0 value is used for j in range(1,100): r.append([r[j-1][i]+v[j-1][i]*0.01 for i in range(10)]) v.append([v[j-1][i] for i in range(10)]) e.append([0.5*1*(v[j][i]**2) for i in range(10)]) ejtotal = sum(e[j]) print(j,ejtotal) 来引用序列中的最后一项,并且可能直接迭代前面列表中的值而不是索引它们,可以减少它。您也可以重复使用第一个-1v值,因为它们不会随着e值的增加而改变。