我目前正在进行各种类型的模拟,我有代码将数据构建成一个数组,如下所示:
[['_' '_' '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)
答案 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
另请注意,您发布的矩阵没有逗号。