Python Array超出界限错误

时间:2018-03-15 21:58:19

标签: python

我收到一个数组错误超出范围的问题。我正在尝试循环通过一个多维数组并将公式中的值添加到每个元素。我如何修复循环,以便跳出数组边界。

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

2 个答案:

答案 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=1r=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)]