将第0个元素附加到列表中,然后在附加其余内容时进行迭代

时间:2017-08-01 22:47:54

标签: python

a = [] 
a.append(0.99)
for i in range(5):
    a[i+1] = a[i] * ((1+((d*c)/2))/(1-((d*c)/2)))
    a.append(a[i+1])
来自第四行的

IndexError: list index out of range

我尝试过一种完全采用不同方法的手,但似乎无法做到正确。输出应该类似于:

[0.99, ####, ####, ####, ####]

我确信这很简单,我相信错误涉及列表的第0个元素,是否有任何帮助机会?

应该吐出相同的答案:

 a0 = 0.99
 a1 = a0 * ((1+((d*c)/2))/(1-((d*c)/2)))
 a2 = a1 * ((1+((d*c)/2))/(1-((d*c)/2)))
 a3 = a2 * ((1+((d*c)/2))/(1-((d*c)/2)))
 a4 = a3 * ((1+((d*c)/2))/(1-((d*c)/2)))

2 个答案:

答案 0 :(得分:0)

当你在python中创建一个列表时,除非使用.append(),否则你无法访问那些没有值的索引(即使你想要分配它们),这就是你得到索引错误的原因。解决此问题的方法是获得所需大小的None值或0值,例如:

a = [0] * 5
a.append(0.99)
for i in range(4):
    a[i+1] = a[i] ** ((1+((d*c)/2))/(1-((d*c)/2)))
    # no need to append now

现在a将为[0, 0, 0, 0, 0],您可以通过索引正常访问。

编辑:

我在您最近的编辑中注意到您要将a乘以((1+((d*c)/2))/(1-((d*c)/2))),但您在代码示例中使用的是**,这意味着强大了。您应该使用*代替。

答案 1 :(得分:-1)

a.append(a[-1] ** ((1+((d*c)/2))/(1-((d*c)/2))))