我有一个NxN数组(t\u字段),单元格中填充了0或1。你知道吗
我想检查范围内实体的任何邻居是否已填充。你知道吗
实体是一个1的序列,具有(row,start),(row,end),我想检查上面的行,下面的行,但是在start-1和end+1的约束范围内:
contacts = [t_field[row_n - 1][start-1:end+2],
t_field[row_n + 1][start-1:end+2]]
但是如果我在第0行,我不想让它检查第1行,因为这将查看网格的末尾。在这种情况下,它将只检查行1;反之亦然,如果行是n(网格的大小),它将在检查行+1时执行trow和indexeror
start/end也是一样,如果start是0,我不想勾选-1,因为它会看到网格的另一面。我只想检查end+2。反之亦然。你知道吗
start = column_n - length + 1
end = column_n
upperrow = row_n - 1
lowerrow = row_n + 1
if upperrow < 0:
upperrow = None
if lowerrow >= len(t_field):
lowerrow = None
leftside = start - 1
rightside = end + 2
if leftside < 0:
leftside = None
if rightside >= len(t_field):
rightside = None
if upperrow is not None and lowerrow is not None:
if leftside is not None and rightside is not None:
contacts = [t_field[upperrow][leftside:rightside],
t_field[lowerrow][leftside:rightside]]
elif leftside is None and rightside is not None:
contacts = [t_field[upperrow][0:rightside],
t_field[lowerrow][0:rightside]]
elif leftside is not None and rightside is None:
contacts = [t_field[upperrow][leftside:end + 1],
t_field[lowerrow][leftside:end + 1]]
elif upperrow is None and lowerrow is not None:
if leftside is not None and rightside is not None:
contacts = [t_field[lowerrow][leftside:rightside]]
elif leftside is None and rightside is not None:
contacts = [t_field[lowerrow][0:rightside]]
elif leftside is not None and rightside is None:
contacts = [t_field[lowerrow][leftside:end + 1]]
elif upperrow is not None and lowerrow is None:
if leftside is not None and rightside is not None:
contacts = [t_field[upperrow][leftside:rightside]]
elif leftside is None and rightside is not None:
contacts = [t_field[upperrow][0:rightside]]
elif leftside is not None and rightside is None:
contacts = [t_field[upperrow][leftside:end + 1]]
if any(itertools.chain(*contacts)):
return True
这个很好用,但它非常难看。非常重复的代码,很难阅读/理解正在发生的事情。你知道吗
如你所见,有3行是我想要的,至少30行是我必须写的,才能让这3行工作。你知道吗
在这张图片中,我展示了我在寻找什么。实体是灰色区域,邻居是红色区域。我想看看邻居有没有人。你知道吗
怎样才能找到那些邻居?
假设将代码放入函数中:
相关问题 更多 >
编程相关推荐