python - IndexError:列表索引超出范围/划分列表

时间:2015-02-11 20:40:39

标签: python

我在编程方面并不擅长,而且我一直在疯狂地试图解决这个问题。

我有一个程序来计算在列表中存储值的绑定能量。在某个时刻,一个列表被一个不同的列表划分,但我不断收到此错误:

Traceback (most recent call last):
  File "semf.py", line 76, in <module>
    BpN = BpN(A, Z)
  File "semf.py", line 68, in BpN
    bper = B[i]/A[i]
IndexError: list index out of range

相关的代码如下,对不起有这么多:

  A = 0.0

def mass_A(Z):
    """
    ranges through all A values Z, ..., 3Z+1 for Z ranging from 1 to 100
    """
    a = 0.0
    a = np.arange(Z, 3*Z+1)
    return a

def semf(A, Z):
    """
    The semi-empirical mass formula (SEMF) calculates the binding energy of the nucleus.
    N is the number of neutrons.
    """
    i = 0
    E = []
    for n in A:
        # if statement to determine value of a5
        if np.all(Z%2==0 and (A-Z)%2==0):
            a5 = 12.0
        elif np.all(Z%2!=0 and (A-Z)%2!=0):
            a5 = -12.0
        else:
            a5 = 0

        B = a1*A[i] - a2*A[i]**(2/3) - a3*(Z**2 / A[i]**(1/3)) - a4*( (A[i] - 2*Z)**2 / A[i] ) + a5 / A[i]**(1/2)
        i += 1
    E.append(B)
    return E

def BpN(A, Z):
    """
     function to calculate the binding energy per nucleon (B/A)
     """
    i = 0
    R = []
    for n in range(1,101):
        bper = B[i]/A[i]
        i += 1
        R.append(bper)
    return R

for Z in range(1,101):
    A = mass_A(Z)
    B = semf(A, Z)
    BpN = BpN(A, Z)

似乎不知何故,两个名单A和B的长度不一样,但我不确定如何解决这个问题。

请帮忙。

由于

1 个答案:

答案 0 :(得分:1)

在Python中,列表索引从零开始,而不是从一开始。

如果没有完整地看到您的代码,很难确定,但range(1,101)看起来很可疑。如果列表包含100个元素,则循环的正确边界为range(0,100)或等效range(100),或者更好,range(len(A))

P.S。由于您已经在使用Numpy,因此您应该考虑使用Numpy数组重写代码,而不是使用列表和循环。如果AB是Numpy数组,那么整个麻烦的函数可能会变成:

return B / A

(这是B A的元素划分。{/ p>