【问题标题】:Getting the following error upon exceuting the below code: Index out of range [closed]执行以下代码时出现以下错误:索引超出范围[关闭]
【发布时间】:2023-03-23 21:25:01
【问题描述】:
def evolve():
    global pop,fvals
    for g in xrange(0,gmax):     
        for i in xrange(0,NP):           
            while 1:
                r1=random.randint(0,NP-1)
                if r1!=i:          
                    break           
            while 1:
                r2=random.randint(0,NP-1)
                if r2!=r1 and r2!=i:
                    break
            while 1:
                r3=random.randint(0,NP-1)
                if r3!=r2 and r3!=r1 and r3!=i:
                    break
            U=[]
            V=[]
            for j in xrange(0,dim):    
                   U.insert(j,(pop[r3])[j] + F*((pop[r1])[j]-(pop[r2])[j]))                     
            jrand = floor(int(rand1()*dim)) 
            for j in xrange(0,dim):
        if rand1()<=cr or j==jrand:
                     U.insert(j,(pop[r3])[j] + F*((pop[r1])[j]-(pop[r2])[j]))  
                else:
                     U.insert(j,(pop[i])[j])         
            V.insert(i,U)                         
        fvals2.insert(i,fun(U)) 
        x=open("x.out","w")         
        for i in xrange(NP):
            for j in xrange(dim):
               print i
           print j
               x.write(str((V[i])[j]) + '\t')
            x.write(str(fvals2[i]))
            x.write('\n')

执行此代码块时显示错误:

x.write(str((V[i])[j]) + '\t')
IndexError: list index out of range

这里我取了gmax=5dim=2NP=5

【问题讨论】:

  • 列表V 似乎少于NP 元素。要么更改 i 在该循环中的范围,要么找出为什么 V 的元素太少。

标签: python file syntax-error


【解决方案1】:

您在每个for n in xrange(0,NP) 循环上将V 设置为[],从而丢失了之前的所有值。这意味着在您写入文件时,V 中仅包含一个值(最多),这就是为什么当您尝试从中读取 xrange(NP) 值时会收到 IndexError 的原因。您可能希望在该循环之外初始化 V

您还遗漏了if rand1()&lt;=cr or j==rand 上的一些缩进,但我猜这是在将代码放入您的帖子时发生的,或者在写入文件时它可能运行得不够远而无法获得 IndexError。

除此之外,请考虑以下几点:

  1. 请用实际名称命名您的变量 - 所有这些单个字母和字母数字组合使代码非常难以阅读。
  2. 您还可以考虑将其中一些嵌套操作分解为单独的函数,这也可以提高可读性。
  3. 您并没有在写完输出文件后关闭它——您可能想在末尾添加一个x.close() 行,或者在with open('x.out','w') as x: 块内完成所有的写操作。您还将在 for g in xrange(0,gmax) 的每个循环上覆盖该文件,因此您可能也希望将其移出该循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2015-01-01
    • 2020-10-10
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多