1
def main():
    rows = int(input("Insert # of rows "))
    cols = int(input("Insert # of cols "))
    dept = int(input("Insert # of dept ")) 
    count = 0
    trash = count


    table = [[[ 0
        for i in range(cols) ]
             for j in range(rows) ]
                  for k in range (dept) ]
    print ()
    print ("Print empty table")
    print(table)
    print()

    print("Print each element")

    for i in range(rows):
        print("-" * 30, "rows", i+1)
        for j in range(cols):
            print("-" * 22, "col", j+1)
            for k in range (dept):        
                count += 1
                table [i][j][k] = count 
                print ("row", i+1, "column", j+1, "depth", k+1, "=", count)

    print()
    print(table)
main()

3 つの数値がすべて同じ場合、これは正常に機能します。そうでない場合は、変数の 1 つが指定された数値を初めて上回らなければならないときに停止します。すなわち。2、3、および 2 を入力すると、3 列目に到達するまで正常に動作し、その後停止して、次のメッセージが表示されます。

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    main()
  File "C:/Users/***/Documents/prog123", line 28, in main
    table [i][j][k] = count
IndexError: list assignment index out of range

行を取り出すと:

table [i][j][k] = count 

テーブルを埋めないことを除けば、うまく機能します。2つの次元(深さを取り出す)だけにするとうまくいきます。コードの前または後に行を移動しても、どちらも役に立たないようです。私はすでにここで同様の質問を調べましたが、ここでエラーを見つけるのに役立つものは何も見当たりませんでした.

4

2 に答える 2

0

インデックスが混同されています。

外側のリストを使用してテーブルをdept作成し、非常に内側のリストにcols要素が含まれています。次に、ループオーバーで最も内側の要素に対処し、range(dept)で最も外側のリストに対処しようとしますrange(rows)

Python のリスト内包表記は、ネストされているかのように左から右に読み取る必要があります。リスト内包表記をそのようにフォーマットしました:

table = [[[ 0
    for i in range(cols) ]
         for j in range(rows) ]
              for k in range (dept) ]

しかし、2 番目のネストされたrange()ループとインデックスはその構造と一致しません。割り当てるときに複製します。範囲ループを外側に移動し、セルの参照depts方法を調整します。k

for k in range(dept):        
    for i in range(rows):
        print("-" * 30, "rows", i+1)
        for j in range(cols):
            print("-" * 22, "col", j+1)
                count += 1
                table[k][i][j] = count 
                print("depth", k+1, "row", i+1, "column", j+1, "=", count)

ネストがどのように一致するかに注意してください。k( dept)、次にi( rows)、次にj( cols)。

于 2013-10-25T00:18:32.623 に答える