列表分配索引超出范围

时间:2013-08-29 11:52:50

标签: python arrays list

我的代码给了我错误:

    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 and Settings \ jhsilva \ Desktop \ Monte carlo \ Teste.py”,第71行,in generateRandomNumbers(list_subs) 在generateRandomNumbers中输入文件“C:\ Documents and Settings \ jhsilva \ Desktop \ Monte carlo \ Teste.py”,第41行 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))

1 个答案:

答案 0 :(得分:3)

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

您将list_subs设置为长度为4的列表列表。这意味着有效的indeces为0, 1, 2, 3。在generateRandomNumbers中,您访问的索引4无效。


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