如何解决如何使用Python中的2D数组避免“索引不足”错误?
任务是遍历二维列表中的所有元素,并对每个元素及其最近的邻居进行一些特定的计算:
count = 0
for i in range(0,len(arr)):
for j in range(0,len(arr)):
if arr[i][j] == 7 and is_perfect_cube(arr[i-1][j] + arr[i+1][j] + arr[i][j-1] + arr[i][j+1]):
count += 1
不幸的是,我不断收到索引超出范围错误。到目前为止,根据我已经调试过的内容,该错误出现在集合的第一个和最后一个元素上。我知道我可以使用float[int]
,但不确定如何将其应用于我的特定实现。我找不到任何类似的问题。
解决方法
您的代码明确尝试使用超出数组范围的元素。在这次通话中,
is_perfect_cube(arr[i-1][j]+arr[i+1][j]+arr[i][j-1]+arr[i][j+1])
您要的arr[i-1][j]
等于-1
的{{1}}-并获取最后一行-在某些情况下可能是需要的。然后,您还要求i=0
等于arr[i+1][j]
等于最后一个元素,即i
显然超出范围并导致错误。 len(arr)-1
同样适用-只是列而不是行。
要处理此问题,您需要忽略端点(在两个维度上从1到size-2循环)或修改端点的算法。选择取决于您要解决的问题。所有已建立的算法都考虑了端点,您可以检查解决方案。
,count = 0
for i in range(0,len(arr)):
for j in range(0,len(arr)):
if arr[i][j] == 7:
try:
up = arr[i-1][j]
except:
up = 0
try:
down = arr[i+1][j]
except:
down = 0
try:
left = arr[i][j-1]
except:
left = 0
try:
right = arr[i][j+1]
except:
right = 0
if is_perfect_cube(up+down+left+right):
count += 1
这是我对问题的解答。我不知道这是否是解决界外问题的正确方法。我仍然愿意征求意见
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。