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 个数字都相同,则此方法可以正常工作。如果不是,它会在其中一个变量第一次超过其指定数字时停止。IE。如果输入 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 

它工作正常,除了它没有填写表格。如果我让它只有两个维度(取出深度),它也可以正常工作。在代码中将行移到更早或更晚似乎也无济于事。我已经在这里查看了类似的问题,但没有看到任何帮助我在这里发现错误的东西。

4

2 回答 2

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

这将使您的最里面的列表(最后一个索引,即 with k)具有cols元素。这不是你的意思,即使colsrows转身。

嵌套列表推导是从内向外工作的,因此您希望从循环遍历它的方式向后写:

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

然后你的其余代码应该保持不变。

于 2013-10-25T00:20:13.113 回答
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) ]

但是您的第二个嵌套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 回答