我收到一个数组错误超出范围的问题。我正在尝试循环通过一个多维数组并将公式中的值添加到每个元素。我如何修复循环,以便跳出数组边界。
z=int(4.3/7.9)
V =51
T =51
r = 1
c = 1
a=[[0]*c for i in range(r)]
for r in range(1,51):
for c in range(1,51):
a[c][r]=35.74 + 0.6215*T - (35.75*V)**0.16 + (0.4275*T*V)**0.16
print()
#print to html file down below
outfile=open("c:\\data\\pfile.html","w")
outfile.write("<!DOCTYPE html>")
outfile.write("<html>")
outfile.write("<head>")
outfile.write("<title>Kye Fullwood</title>")
outfile.write("<style> table,td{border:1px solid black;border-collaspse:collapse;background-color:aqua;}</style>\r\n")
outfile.write("</head>")
outfile.write("<body>")
outfile.write("<h1>This is a Windchill table</h1>")
outfile.write("<table>")
for V in range(1,51,1):
outfile.write("<tr>")
for TV in range(1,51,1):
outfile.write("<td>"+str(a[r][c])+"</td>\r\n")
outfile.write("</tr>")
outfile.write("</table>")
outfile.write("</body>")
outfile.write("</html>")
outfile.close()
print("complete")
答案 0 :(得分:0)
当您按照上述方式初始化列表时
r = 1
c = 1
a=[[0]*c for i in range(r)]
因为那时c和r都是1,你的列表看起来像这样 - [[0]] - 所以当你尝试更新任何索引时,你将会超出范围错误除[0] [0]以外的列表。因为在这段代码中
for r in range(1,51):
for c in range(1,51):
a[c][r]=35.74 + 0.6215*T - (35.75*V)**0.16 + (0.4275*T*V)**0.16
你进入[51] [51],当你首先初始化列表时,你需要r和c都设置为至少52。
就此而言,在此代码中
for V in range(1,51,1):
outfile.write("<tr>")
for TV in range(1,51,1):
outfile.write("<td>"+str(a[r][c])+"</td>\r\n")
你只会打印2500次相同的值,因为你永远不会在这些循环中改变r和c。
答案 1 :(得分:0)
a=[[0]*c for i in range(r)]
基本上代表a=[[0]]
,因为您的代码以c=1
和r=1
开头。因此,当您尝试使用a
中的索引访问矩阵range(1,51)
时,您会遇到“超出范围”的异常,因为矩阵中只有一个元素。
要创建50x50空矩阵,可以使用以下python惯用法:
a = [[0 for col in range(50)] for row in range(50)]
但我想从你的代码中你确实需要这个:
a = [[35.74 + 0.6215*T - (35.75*V)**0.16 + (0.4275*T*V)**0.16
for T in range(1,51)] for V in range(1,51)]