62651


以前質問させていただいた内容です。  
[三次元で点と点を繋げるには？](https://ja.stackoverflow.com/questions/61618/%E4%B8%89%E6%AC%A1%E5%85%83%E3%81%A7%E7%82%B9%E3%81%A8%E7%82%B9%E3%82%92%E7%B9%8B%E3%81%92%E3%82%8B%E3%81%AB%E3%81%AF/61625)

回答を参考にして以下のように書き直したところ、`list7` までしか認識されませんでした。  
`for i_y in range(10)` としたところ、以下のエラーが出てしまいます。

[code]

    list index out of range
    
[/code]

しかし `for i_y in range(7)` としたところ、`list7` まで表示されるようです。  
どうすればいいでしょうか？

[code]

    # -*- coding: utf-8 -*-
    """
    Created on Tue Oct 29 15:19:41 2019
    
    @author: Administartor
    """
    import matplotlib.pyplot as plt
    import os
    import tkinter
    from tkinter import messagebox
    from tkinter import filedialog
    from mpl_toolkits.mplot3d import axes3d
    import numpy as np
    
    root = tkinter.Tk()
    root.title('微小山') #タイトル
    root.geometry('400x200') #サイズ 横x縦
    
    messagebox.showinfo('select','測定データ')
    fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定
    iniDir1 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ
    filepath1 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir1)
    messagebox.showinfo('選択したファイル',filepath1)
    
    fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定
    iniDir2 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ
    filepath2 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir2)
    messagebox.showinfo('選択したファイル',filepath2)
    
    fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定
    iniDir3 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ
    filepath3 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir3)
    messagebox.showinfo('選択したファイル',filepath3)
    
    fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定
    iniDir4 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ
    filepath4 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir4)
    messagebox.showinfo('選択したファイル',filepath4)
    
    fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定
    iniDir5 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ
    filepath5= filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir5)
    messagebox.showinfo('選択したファイル',filepath5)
    
    fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定
    iniDir6 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ
    filepath6 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir6)
    messagebox.showinfo('選択したファイル',filepath6)
    
    fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定
    iniDir7 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ
    filepath7 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir7)
    messagebox.showinfo('選択したファイル',filepath7)
    
    fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定
    iniDir8 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ
    filepath8 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir8)
    messagebox.showinfo('選択したファイル',filepath8)
    
    fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定
    iniDir9 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ
    filepath9 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir9)
    messagebox.showinfo('選択したファイル',filepath9)
    
    fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定
    iniDir10 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ
    filepath10 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir10)
    
    root.destroy()    
    root.mainloop()
    
    x1_list=[] # data1格納用のx_listを定義
    y1_list=[] # data1格納用のy_listを定義
    z1_list=[] # data1格納用のz_listを定義
    x2_list=[] # data2格納用のx_listを定義
    y2_list=[] # data1格納用のy_listを定義
    z2_list=[] # data2格納用のz_listを定義
    x3_list=[] # data2格納用のx_listを定義
    y3_list=[] # data1格納用のy_listを定義
    z3_list=[] # data2格納用のz_listを定義
    x4_list=[] # data2格納用のx_listを定義
    y4_list=[] # data1格納用のy_listを定義
    z4_list=[] # data2格納用のz_listを定義
    x5_list=[] # data2格納用のx_listを定義
    y5_list=[] # data1格納用のy_listを定義
    z5_list=[] # data2格納用のz_listを定義
    x6_list=[] # data2格納用のx_listを定義
    y6_list=[] # data1格納用のy_listを定義
    z6_list=[] # data2格納用のz_listを定義
    x7_list=[] # data2格納用のx_listを定義
    y7_list=[] # data1格納用のy_listを定義
    z7_list=[] # data2格納用のz_listを定義
    x8_list=[] # data2格納用のx_listを定義
    y8_list=[] # data1格納用のy_listを定義
    z8_list=[] # data2格納用のz_listを定義
    x9_list=[] # data2格納用のx_listを定義
    y9_list=[] # data1格納用のy_listを定義
    z9_list=[] # data2格納用のz_listを定義
    x10_list=[] # data2格納用のx_listを定義
    y10_list=[] # data1格納用のy_listを定義
    z10_list=[] # data2格納用のz_listを定義
    #x11_list=[] # data2格納用のx_listを定義
    #z11_list=[] # data2格納用のz_listを定義
    
    f1=open(filepath1) 
    f2=open(filepath2) 
    f3=open(filepath3) 
    f4=open(filepath4) 
    f5=open(filepath5) 
    f6=open(filepath6) 
    f7=open(filepath7) 
    f8=open(filepath8) 
    f9=open(filepath9) 
    f10=open(filepath10) 
    #f11=open(1, list_item) 
    
    #data1読み込み
    for line in f1:
        data1 = line[:-1].split(' ')
        x1_list.append(float(data1[0]))
        y1_list.append(float(data1[1]))
        z1_list.append(float(data1[2]))
    #data２読み込み
    for line in f2:
        data2 = line[:-1].split(' ')
        x2_list.append(float(data2[0]))
        y2_list.append(float(data2[1]))
        z2_list.append(float(data2[2]))
    
    for line in f3:
        data3 = line[:-1].split(' ')
        x3_list.append(float(data3[0]))
        y3_list.append(float(data3[1]))
        z3_list.append(float(data3[2]))
    
    for line in f4:
        data4 = line[:-1].split(' ')
        x4_list.append(float(data4[0]))
        y4_list.append(float(data4[1]))
        z4_list.append(float(data4[2]))
    
    for line in f5:
        data5 = line[:-1].split(' ')
        x5_list.append(float(data5[0]))
        y5_list.append(float(data5[1]))
        z5_list.append(float(data5[2]))
    
    for line in f6:
        data6 = line[:-1].split(' ')
        x6_list.append(float(data6[0]))
        y6_list.append(float(data6[1]))
        z6_list.append(float(data6[2]))
    
    for line in f7:
        data7 = line[:-1].split(' ')
        x7_list.append(float(data7[0]))
        y7_list.append(float(data7[1]))
        z7_list.append(float(data7[2]))
    
    for line in f8:
        data8 = line[:-1].split(' ')
        x8_list.append(float(data8[0]))
        y8_list.append(float(data8[1]))
        z8_list.append(float(data8[2]))
    
    for line in f9:
        data9 = line[:-1].split(' ')
        x9_list.append(float(data9[0]))
        y9_list.append(float(data9[1]))
        z9_list.append(float(data9[2]))    
    for line in f10:
        data10 = line[:-1].split(' ')
        x10_list.append(float(data10[0]))
        y10_list.append(float(data10[1]))
        z10_list.append(float(data10[2]))    
    #for line in f11:
       # data11 = line[:-1].split(' ')
       # x11_list.append(float(data11[0]))
        #z11_list.append(float(data11[1]))
    
    min_z = min(z1_list)
    max_z = max(z1_list)
    
    tmin = min(z2_list)
    if tmin < min_z:
        min_z = tmin
    
    tmax = max(z2_list)
    if tmax > max_z:
        max_z = tmax
    
    tmin = min(z3_list)
    if tmin < min_z:
        min_z = tmin
    
    tmax = max(z3_list)
    if tmax > max_z:
        max_z = tmax
    
    tmin = min(z4_list)
    if tmin < min_z:
        min_z = tmin
    
    tmax = max(z4_list)
    if tmax > max_z:
        max_z = tmax
    
    tmin = min(z5_list)
    if tmin < min_z:
        min_z = tmin
    
    tmax = max(z5_list)
    if tmax > max_z:
        max_z = tmax
    
    tmin = min(z6_list)
    if tmin < min_z:
        min_z = tmin
    
    tmax = max(z6_list)
    if tmax > max_z:
        max_z = tmax
    
    tmin = min(z7_list)
    if tmin < min_z:
        min_z = tmin
    
    tmax = max(z7_list)
    if tmax > max_z:
        max_z = tmax
    
    tmin = min(z8_list)
    if tmin < min_z:
        min_z = tmin
    
    tmax = max(z8_list)
    if tmax > max_z:
        max_z = tmax
    
    tmin = min(z9_list)
    if tmin < min_z:
        min_z = tmin
    
    tmax = max(z9_list)
    if tmax > max_z:
        max_z = tmax
    
    tmin = min(z10_list)
    if tmin < min_z:
        min_z = tmin
    
    tmax = max(z10_list)
    if tmax > max_z:
        max_z = tmax
    
    #tmin = min(z11_list)
    #if tmin < min_z:
    #    min_z = tmin
    
    # list にまとめる
    xs = [x1_list,x2_list,x3_list,x4_list,x5_list,x6_list,x7_list,x8_list,x9_list,x10_list]
    ys = [y1_list,y2_list,y3_list,y4_list,y5_list,y6_list,y7_list,y8_list,y9_list,y10_list]
    zs = [z1_list,z2_list,z3_list,z4_list,z5_list,z6_list,z7_list,z8_list,z9_list,z10_list]
    
    # 2次元配列に並び替える
    # X軸: 右向き (x_list)
    # Y軸: 奥向き (系列番号)
    # Z軸: 上向き (z_list)
    
    X = [ [ xs[i_y][i_x] for i_x in range(6509) ] for i_y in range(7) ]
    Y = [ [ ys[i_y][i_x] for i_x in range(6509) ] for i_y in range(7) ]
    Z = [ [ zs[i_y][i_x] for i_x in range(6509) ] for i_y in range(7) ]
    
    # numpy array に変換
    X = np.array(X, np.float32)
    Y = np.array(Y, np.float32)
    Z = np.array(Z, np.float32)
    
    # 描画
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d', xlabel='X', ylabel='Y', zlabel='Z')
    ax.plot_wireframe(X, Y, Z)    
    plt.show()
    
[/code]


CC BY-SA 4.0
2020-01-27T18:26:19.697
62592
2020-01-30T03:09:57.257
2020-01-28T01:32:11.497
3060
37608
question
python numpy matplotlib
python list index out of range 表示


手元の環境で質問文のコードをrange(10)に変えて試したところ、正常に動作しました。

data8以降のデータに不備がある可能性が懸念されます。  
行数は足りているとのコメントがありますので、行のどこかで何らかの形でスペースが欠損してzが足りない箇所がないかどうか確認してみてください。(スペースが足りない、全角スペースになっている、タブ文字になっているなど)  
Tracebackを追記していただくと、原因が絞れるかもしれません。

data8の **行数が** 不足している場合のTraceback例(ファイル選択のコードなどを若干改造しているため、"line
227"は実際の結果と異なります)

[code]

    Traceback (most recent call last):
      File "test.py", line 227, in <module>
        X = [ [ xs[i_y][i_x] for i_x in range(6509) ] for i_y in range(10) ]
      File "test.py", line 227, in <listcomp>
        X = [ [ xs[i_y][i_x] for i_x in range(6509) ] for i_y in range(10) ]
      File "test.py", line 227, in <listcomp>
        X = [ [ xs[i_y][i_x] for i_x in range(6509) ] for i_y in range(10) ]
    IndexError: list index out of range
    
[/code]

data8の **列数が** 不足している場合のTraceback例(ファイル選択のコードなどを若干改造しているため、"line
119"は実際の結果と異なります)

[code]

    Traceback (most recent call last):
      File "test.py", line 119, in <module>
        z8_list.append(float(data8[2]))
    IndexError: list index out of range
    
[/code]


CC BY-SA 4.0
2020-01-30T03:09:57.257
62651
2020-01-30T03:09:57.257
9820
62592
answer