2013-08-29 143 views
0

我的代码是给我的错误:列表分配索引超出范围

list_subs[n][4] = np.random.normal(list_subs[n][1], list_subs[n][2]) 
IndexError: list assignment index out of range. 

...我已经寻找这个错误,我仍然无法找到什么问题。

编辑:全回溯

回溯(最近通话最后一个): 文件 “”,行420,在run_nodebug 文件“C:\ Documents和Settings \ jhsilva \桌面\蒙特卡罗\ Teste.py “,第71行,在 generateRandomNumbers(list_subs) 文件”C:\ Documents and Settings \ jhsilva \ Desktop \ Monte Carlo \ Teste.py“,第41行,在generateRandomNumbers中 list_subs [n] [4] = np.random .normal(list_subs [n] [1],list_subs [n] [2]) IndexError:列表分配索引超出范围

代码

def generateRandomNumbers(list_subs): 

    for n in range(len(list_subs)): 

     string = list_subs[n][3] 
     string = string.lower() 

     if(string == "normal"): 
      list_subs[n][4] = np.random.normal(list_subs[n][1], list_subs[n][2]) 
      print("Numero gerado:",list_subs[n][4]) 


variables = [v for v in variables if v not in special] 


list_subs=[[0 for col in range(6)] for row in range(len(variables)-1)] 

#This prints fine 
print(len(list_subs)) 

#this prints fine too 
print(list_subs[0][4]) 

for n in range(len(variables)): 
    if n>0: 
     (media,desviopadrao,distribuicao) = eval(input("For variable "+variables[n]+" input: median, std, distr \n")) 
     list_subs[n-1] = [variables[n], media, desviopadrao, distribuicao] 

N = eval(input("Qual o numero de iteracoes que deseja:")) 

Var = [] 
for n in range(N): 
    generateRandomNumbers(list_subs) 
    Var.append(calcEq(formula)) 
+0

**其中**是否给你例外?什么是*完整*追溯? –

+1

不要使用'string'作为变量名称,也不要使用InitialCaps作为变量;如果'list_sub [n]'没有3个元素会发生什么? –

+0

我将list_subs []初始化为6x变量矩阵。我添加了4个字段,然后在generateRandomNumbers中尝试填充第五个字段。 – humberto

回答

3
list_subs[n-1] = [variables[n], media, desviopadrao, distribuicao] 

要设置list_subs是长度4的名单列表。这意味着有效的数字是0, 1, 2, 3。在generateRandomNumbers您访问索引4,这是无效的。


安全说明:请勿使用eval(input(...))。如果你想解析数字/元组等,只需使用ast.literal_eval,这是一个安全的选择。

+0

是的,但我初始化与6列的list_subs: list_subs = [[对于范围(6)]为范围内的行(len(变量)-1)] 因为我没有填充整列它重塑本身? 不知道“ast.literal_eval” – humberto

+0

@humberto我已经突出显示的行**用新列表替换了**索引“n-1”处的内容。如果你只想设置前一个内容的前4个元素,那么使用'list_subs [n-1] [:4] = [变量[n],媒体,desviopadrao,distribucao]'。 – Bakuriu

+0

哦。我不知道。我想,因为我初始化为6列,它总是6列。谢谢你的诀窍:) – humberto

相关问题