Python分配索引错误

Python分配索引错误,python,indexing,Python,Indexing,如果所有3个数字都相同,则此操作正常。如果没有,则当其中一个变量必须超过其指定值时,它将停止。即,如果输入2、3和2,它将正常工作,直到到达第3列,然后停止,给出以下消息: def main(): rows = int(input("Insert # of rows ")) cols = int(input("Insert # of cols ")) dept = int(input("Insert # of dept ")) count = 0 tra

如果所有3个数字都相同,则此操作正常。如果没有,则当其中一个变量必须超过其指定值时,它将停止。即,如果输入2、3和2,它将正常工作,直到到达第3列,然后停止,给出以下消息:

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()

它工作得很好,只是不能填在表格里。如果我让它只有两个维度(去掉深度),它也可以很好地工作。在代码中将行移动到更早或更晚的位置似乎也没有帮助。我已经在这里查看了类似的问题,但没有发现任何有助于我发现错误的地方。

你的指数弄错了

您使用
dept
外部列表构建了表,内部列表具有
cols
元素。然后,您尝试使用
范围(dept)
上的循环来处理最里面的元素,并使用
范围(行)
来处理最外面的列表

Python列表理解应该从左到右读取,就像它们是嵌套的一样;您甚至将您的列表格式设置为:

table [i][j][k] = count 
但是第二个嵌套的
range()
循环和索引与该结构不匹配;分配时复制它。将
depts
范围循环移出,并调整使用
k
引用单元格的方式:

table = [[[ 0
    for i in range(cols) ]
         for j in range(rows) ]
              for k in range (dept) ]
注意现在嵌套是如何匹配的<代码>k(
部门
),然后
i
),然后
j
cols

这将使最里面的列表(最后一个索引的列表,即带有
k
)具有
cols
元素。这不是你的意思,即使切换了
cols
rows

嵌套的列表理解是由内而外的,因此您希望从循环的方式将其向后写入:

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

那么剩下的代码应该保持不变。

我认为表定义是错误的,应该是
[[range(dept)]--range(cols)]--range(rows)]
而不是
[[cols]--rows]--dept]
,如果你知道我的意思的话。谢谢!我想这是我的一个简单(愚蠢)的错误。那把它修好了。谢谢对不起,我没有意识到我能做到,而且忘了检查一下这个。我道歉。
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)
table = [[[ 0
    for i in range(cols) ]
         for j in range(rows) ]
              for k in range (dept) ]
table = [[[ 0
    for k in range(dept) ]
         for j in range(cols) ]
              for i in range(rows) ]