继续获取Indexerror,尝试使用chararrays

时间:2018-03-25 12:37:52

标签: arrays python-3.x

我目前正在进行各种类型的模拟,我有代码将数据构建成一个数组,如下所示:

[['_' '_' 'F' '_' '_']
 ['_' '_' '_' '_' '_']
 ['W' '_' '_' '_' 'J']
 ['_' '_' '_' '_' '_']
 ['_' '_' 'G' '_' '_']]

我陷入困境的是,如果有意义的话,我不知道如何创建一个逐步传播数据的正交。

基本上我要做的是逐步改变我的chararray中的值,使它看起来更像是这样:

[['_' 'F' 'F' 'F' '_']
 ['W' '_' 'F' '_' 'J']
 ['W' 'W' '_' 'J' 'J']
 ['W' '_' 'G' '_' 'J']
 ['_' 'G' 'G' 'G' '_']]

在步骤1之后,然后继续步骤2等等,直到没有任何移动的空间。

我的想法是创建一个列表,列出正确包围它的所有内容,并使用该列表来确定'_'应该变成什么。但是,当我运行代码 IndexError时:索引4超出了大小为4的轴0。我不太明白我做错了什么或如何修复我的代码所以它工作了好一点。这是我的代码中的一些代码,它在逐行运行后似乎导致了错误:

def spring_spreading(farm):
    for pos_x in range(len(farm)):
        for pos_y in range(len(farm)):
            neighbors = []
            if farm[pos_x, pos_y] == '_':
                if farm[pos_x + 1, pos_y] != '_':
                    neighbors.append(farm[(pos_x + 1, pos_y)])
                    print (neighbors)

1 个答案:

答案 0 :(得分:0)

此行导致错误if farm[pos_x + 1, pos_y] != '_':。请注意,您的循环从0转到len(farm),索引始终为零。另请注意,第二维的长度可能会改变。适当的迭代是:

for i in range(len(farm)):
    for j in range(len(farm[i])):
        # whatever

另请注意,您发布的矩阵没有逗号。