索引器错误:列表索引超出python动态变量长度的范围

索引器错误:列表索引超出python动态变量长度的范围,python,index-error,dynamic-variables,Python,Index Error,Dynamic Variables,当我在函数中用Python创建基本for循环以使用动态可变长度(z)时,我遇到了以下错误: Rs = [] z = [] N = 120 m = 1 for i in range(1, N): Rs[i] = z[m] m = m + 1 为了清楚起见,我会更好地解释我想做什么。 我想解一个方程组,它是由一个动态的未知数组成的。 我已经开始使用“静态”方法,它工作得非常好。基本上,代码大致如下所示: from scipy.optimize import fsolve def

当我在函数中用Python创建基本for循环以使用动态可变长度(z)时,我遇到了以下错误:

Rs = []
z = []
N = 120
m = 1
for i in range(1, N):
    Rs[i] = z[m]
    m = m + 1

为了清楚起见,我会更好地解释我想做什么。 我想解一个方程组,它是由一个动态的未知数组成的。 我已经开始使用“静态”方法,它工作得非常好。基本上,代码大致如下所示:

from scipy.optimize import fsolve

def fixEqSyst(z):
    v1 = z[0]
    v2 = z[1]
    v3 = z[2]
    v4 = z[3]
    f=np.zeros(4)
    f[0] = 2*v1-3*v2+7*v3**2
    f[1] = v1+3*v2**2-9*v3
    f[2] = -3v1**2+12*v2+7*v3
    f[3] = 4*v1+5*V2*v3
    return f

z = fsolve(fixEqSyst, [0, 0, 0, 0])

基于这样一个事实,现在我将面对一个动态的未知数和函数的数量,除了我已经提出的解决方案之外,还有其他的解决方案吗?(使用for循环策略)

仅在循环的第一次迭代中

Rs[1] = z[1]
但是
z[1]
不存在,因为
z=[]

(与
Rs[1]
相同)

我不知道如何修复它,因为我无法猜测您希望用代码执行什么

也许您想将您的假定非空列表
z
的内容复制到
Rs
。然后是两种不同的简单解决方案:

Rs = z   
注意!这不是复制操作,它只将其他名称与同一对象关联,因此
z
中的每一个更改都将在
Rs
中产生相同的更改,反之亦然

Rs = z[:]

这是真实的(但肤浅的)副本。对于简单列表,这与深度副本相同。

在python中为数组赋值时,元素必须已经存在。分配
Rs[i]=z[m]
时,分配的值超出了列表范围。您可以在列表上使用
+=
运算符使其足够大,如下所示:

Rs = []
z = []
N = 120
m = 1
for i in range(m+N):
    z += [m+i]
for i in range(N):
    Rs += [z[m]]
    m = m + 1
请注意,
+=
只能将一个列表连接到另一个列表。因此,这将起作用:

mylist = [1, 2, 3]
mylist += [4]
但这不会:

mylist = [1, 2, 3]
mylist += 4

在列表上的+=运算符上有更多信息。

z
的长度等于0,您可以通过在循环中调用
len(z)
来验证这一点,因此,由于您试图访问空列表中的元素,因此您得到了
indexer
。您需要在循环之前为
z
分配一些元素。但是你想做什么呢?
mylist = [1, 2, 3]
mylist += 4