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个数字相同,则此工作正常。如果不是,则在第一次变量必须超过指定数量时停止。即。如果输入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
它工作正常,但它没有填写表格。如果我只使它有两个维度(取出深度),它也可以正常工作。将代码行移至代码中的早期或晚期似乎也没有帮助。我已经在这里查看了类似的问题,但没有看到任何帮助我在这里发现错误的内容。
答案 0 :(得分:2)
table = [[[ 0
for i in range(cols) ]
for j in range(rows) ]
for k in range (dept) ]
这将使您的最里面列表(索引最后,即k
)列表中包含cols
元素。即使cols
和rows
已切换,这也不是您的意思。
嵌套列表推导从内到外工作,所以你想要从循环它的方式向后写:
table = [[[ 0
for k in range(dept) ]
for j in range(cols) ]
for i in range(rows) ]
然后你的其余代码应该保持不变。
答案 1 :(得分: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
)。