纠正“通过”的索引错误,但仍然出现“列表索引超出范围”错误?

问题描述 投票:0回答:2

我对python还是相当陌生,我正在从事一些复杂(但很有趣!)的项目。我不会赘述过多,但我已经注意到,以前类似的问题往往是针对非常具体的情况,这使它们对我来说很难提取任何东西,但肯定会让人们更容易尝试回答。

我本质上是使用36x36矩阵(在我的代码中简称为“数组”),其中左下角为条目0,其上方的条目为1,依此类推,直到到达第36个条目为止左上角,然后返回到条目0右侧的第37个条目,依此类推。对于给定的条目,我想知道参数右侧,左侧,上侧和下侧的条目的值。当然,有几种边缘情况不会有4个邻居,因此我已尽力考虑到了这些情况,但似乎出现了不一致的错误。

这是我尝试过的最新内容:

def neighbors(i):
    neighbors_array = []
    if array[i+1] in array:
        neighbors_array.append(array[i+1])
    if array[i-1] in array:
        neighbors_array.append(array[i-1])
    if array[i+36] in array:
        neighbors_array.append(array[i+36])
    if array[i-36] not in array:
        neighbors_array.append(array[i-36])
    return neighbors_array

对于数组中间的一个参数,例如800,我得到的4个值与我分别打印array[i+1]array[i-1]等时得到的值完全匹配。但是对于我知道的一个参数,它在最左边即使我只期望3,因为该参数没有与之关联的[i-36]元素,我也得到了包含4个条目的输出数组。对于我知道在最右列中的参数,我得到IndexError: list index out of range

我对为什么两个极端情况没有相同的问题感到困惑,我想解决这两个问题。至于顶部和底部行中的条目,我也得到了意外的4条目输出,除了右上角和右下角外,我得到了索引错误。

我已经尝试将数组转换为实际的矩阵,但是邻居函数的输出更加复杂,无论如何我都会遇到类似的问题,所以我想我会坚持使用数组。

python arrays range
2个回答
1
投票

这不能作为边界检查:


0
投票

您看到的实际问题在代码array[something] in array中(最初是array[i+36] not in array等)。

© www.soinside.com 2019 - 2024. All rights reserved.