由于python中的for循环导致索引错误

时间:2019-07-07 20:22:04

标签: python for-loop index-error

因为我是python编程的新手。我在for循环中遇到索引错误的问题。我听了你给我的建议。我的问题是在for循环中... 下面的代码没有任何错误...

for i in range(0,1):

但是,如果超出限制,例如(0,3),我就报错了

for i in range(0,3):

错误是

IndexError: index 1 is out of bounds for axis 0 with size 1

我试图清除此错误,但我不确定如果限制超过1,为什么在for循环中会发生此错误。

这是我的代码:

m=['paketone4000.dump.xlsx','paketone8000.dump.xlsx','paketone12000.dump.xlsx']
fig_name=['j4000','e8000','e12000']

fig=plt.figure(figsize=(6,6)) ##to obtain figure and dimensions of graph

for i in range(0,3):


    #ax=fig.add_subplot(111,projection='3d') ## to have a broad view of figure
    ax = fig.add_axes([0,0,1,1], projection='3d')

    #plot planes
    p = Rectangle((0,-0.7), 4.5,1.4, color="lightgrey", alpha=0.2) #plots the background frame
    ax.add_patch(p)

    art3d.pathpatch_2d_to_3d(p, z=0, zdir="z")

    j=pd.read_excel(m[i])  ##to read the excel file format
    X=j['x'] ## to import the variable on to axes from data set
    Y=j['y']
    Z=j['z']
    #ax.scatter(X,Y,Z,c='g', marker='o') ## to specify the color and shape of point(marker) of the frame

    a=j['x']##import centre of mass from excel file format
    b=j['y']
    c=j['z']

    q1=j['q1'], ##attaining quaternons from excel file format. (comma(,) transformed series to tuple)
    q2=j['q2'],
    q3=j['q3'],
    q4=j['q4'],

    m,n,o,p=np.array([q1,q2,q3,q4]) ## assigning quaternions to variables had converted tuple to float
    Rot_Mat=QtoR(m,n,o,p)

    #cuboid initialising parameters
    center = [a[0], b[0], c[0]] ##centre of the body
    length = 0.3 ##defining length, breadth, height
    width = 0.4
    height = 0.1
    side = np.zeros((8,3))  ###This numpy vector will be used to store the position of the sides

    #rotate the axes and update
    for angle in range(0, 360):
        ax.view_init(90, angle)

    cuboid(center, (length, width, height)) #to execute the defined cuboid

    plt.savefig(fig_name[i])
    plt.clf()
print("\nq1=",m,"q2=",n,"q3=",o,"q4=",p)
print('\nRotation Matrix=',Rot_Mat)
print ("\nCenter = \n",center)

我的预期结果是我想删除所获得的错误,并且我想知道为什么当结束限制大于1时会发生该错误。

2 个答案:

答案 0 :(得分:2)

您将名称m用于代码中的两个不同变量。在文件的顶部,您可以使用它创建一个文件名列表,您可以在循环中读取该文件名。但是在循环的后面,您可以使用以下这一行重新分配它:

m,n,o,p=np.array([q1,q2,q3,q4])

当您尝试读取以后的文件时,这会导致错误,因为新的m值不包含代码期望的值(并且可能不是期望的大小)。

您应该使用两个不同的变量名。此类问题表明,使用更长,更具描述性的变量名称可能是一个好主意,因为与filenamesfirst_quaternion之类的名称发生这种随机名称空间冲突的可能性要小得多(或其他)。

我还建议您使用range(len(m)),这样,如果您以后再更改列表的大小,就不必记住也要更改硬编码范围的大小。

答案 1 :(得分:0)

此代码执行的image。您如何尝试更换

for i in range(0, 5):

使用

for i in range(len(m)):

编辑: 这行得通吗?

m=['paketone4000.dump.xlsx','paketone8000.dump.xlsx','paketone12000.dump.xlsx']
fig_name=['j4000','e8000','e12000']

fig=plt.figure(figsize=(6,6)) ##to obtain figure and dimensions of graph

for index, i in enumerate(m):


    #ax=fig.add_subplot(111,projection='3d') ## to have a broad view of figure
    ax = fig.add_axes([0,0,1,1], projection='3d')

    #plot planes
    p = Rectangle((0,-0.7), 4.5,1.4, color="lightgrey", alpha=0.2) #plots the background frame
    ax.add_patch(p)

    art3d.pathpatch_2d_to_3d(p, z=0, zdir="z")

    j=pd.read_excel(i)  ##to read the excel file format
    X=j['x'] ## to import the variable on to axes from data set
    Y=j['y']
    Z=j['z']
    #ax.scatter(X,Y,Z,c='g', marker='o') ## to specify the color and shape of point(marker) of the frame

    a=j['x']##import centre of mass from excel file format
    b=j['y']
    c=j['z']

    q1=j['q1'], ##attaining quaternons from excel file format. (comma(,) transformed series to tuple)
    q2=j['q2'],
    q3=j['q3'],
    q4=j['q4'],

    m2,n,o,p=np.array([q1,q2,q3,q4]) ## assigning quaternions to variables had converted tuple to float
    Rot_Mat=QtoR(m2,n,o,p)

    #cuboid initialising parameters
    center = [a[0], b[0], c[0]] ##centre of the body
    length = 0.3 ##defining length, breadth, height
    width = 0.4
    height = 0.1
    side = np.zeros((8,3))  ###This numpy vector will be used to store the position of the sides

    #rotate the axes and update
    for angle in range(0, 360):
        ax.view_init(90, angle)

    cuboid(center, (length, width, height)) #to execute the defined cuboid
    amount_of_files_to_rename=index
    new_names = [i*1000 for i in range(4*amount_of_files_to_rename)[::4]]
    for i in new_names:
        plt.savefig('packetone {}.jpg'.format(i))

    #plt.savefig(fig_name[b])
    #plt.clf()       
print("\nq1=",m2,"q2=",n,"q3=",o,"q4=",p)
print('\nRotation Matrix=',Rot_Mat)
print ("\nCenter = \n",center)