python中的索引和范围

时间:2018-09-20 14:48:46

标签: python-3.x

我有此代码:

def main():

    if (len(sys.argv) > 2) :
        P=list()
        f= open('Trace.txt' , 'w+')
        Seed = int(sys.argv[1])

        for i in range(2, len(sys.argv)):
            P[i-2] = int(sys.argv[i])
            for j in range(0, len(sys.argv)-1) :
                Probability=P[j]
                for Iteration in (K*j, K*(j+1)):
                    Instruction= generateInstruction(Seed, Probability)
                    f.write(Instruction)
                f.close()
    else:
        print('Params Error')
if __name__ == "__main__":
    main()

这个想法是我正在通过命令行传递一些参数。第一个是种子,其余的我想将它们包含在列表中,稍后我将对其进行解析并根据该参数进行处理。 我不断收到此错误:

 P[i-2] = int(sys.argv[i])
IndexError: list assignment index out of range

我在做什么错

PS:K,generateSegment()在代码的前一部分中定义。

3 个答案:

答案 0 :(得分:2)

您看到的错误与list被无效索引建立索引有关。

具体来说,问题在于在该行中调用P时是一个空列表,因此P[0]确实不可访问。也许您想要的实际上是将元素添加到列表中,这可以通过例如替换来实现:

P[i-2] = int(sys.argv[i])

具有:

P.append(int(sys.argv[i]))

还要注意,通过使用标准模块argparse而不是手动解析sys.argv,在Python中通常可以更有效地实现参数解析。

答案 1 :(得分:0)

您似乎正在引用一个不存在的列表项。

我已经有一段时间没有使用Python了,但是我很确定,如果要将值添加到列表末尾,可以使用someList.append(foo)

答案 2 :(得分:0)

问题是您正在为一个尚不存在的索引分配一个值。 您需要替换

P[i-2] = int(sys.argv[I])

使用

P.append(int(sys.argv[i]))

此外,len(sys.argv)将返回sys.argv中的项目数,但是索引从0开始,因此您需要更改:

for i in range(2, len(sys.argv)):

使用

for i in range(2, len(sys.argv)-1):

否则您将遇到list index out of range错误