neighbors()函数开发任务:统计二维数组指定位置的相邻1元素数量
实现
neighbors()函数的解决方案 没问题,我来帮你搞定这个统计二维数组相邻1的数量的函数!
需求回顾
我们需要编写一个neighbors()函数,接收三个参数:
- 一个二维数组
input - 目标元素的行索引
row - 目标元素的列索引
column
函数要返回目标位置周围最多8个相邻单元格中值为1的数量,边界/角落的元素会自动忽略超出数组范围的方向。
实现思路
核心思路是遍历所有8个可能的相邻方向,逐个检查每个方向的位置是否合法(不越界),如果合法且值为1就计数:
- 定义8个方向的坐标偏移量,涵盖正北、正南、正东、正西和四个对角线方向;
- 遍历每个偏移量,计算相邻位置的行和列;
- 检查该位置是否在数组的有效范围内;
- 如果有效且值为1,就把计数器加1;
- 最后返回计数器的值。
完整代码实现
def neighbors(input_array, row, column): # 定义8个相邻方向的偏移量(行偏移, 列偏移) directions = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)] count = 0 rows = len(input_array) # 提前判断输入的行索引是否合法,避免后续报错 if rows == 0 or row < 0 or row >= rows: return 0 cols = len(input_array[0]) # 提前判断输入的列索引是否合法 if column < 0 or column >= cols: return 0 for dr, dc in directions: neighbor_row = row + dr neighbor_col = column + dc # 检查相邻位置是否在数组范围内 if 0 <= neighbor_row < rows and 0 <= neighbor_col < cols: # 如果值为1,计数加1 if input_array[neighbor_row][neighbor_col] == 1: count += 1 return count
测试示例验证
用你给出的测试数组来验证:
array = [ [0, 0, 0, 0], [1, 1, 0, 1], [0, 0, 0, 1] ]
- 调用
neighbors(array, 1, 1):目标位置是第二行第二列的1,周围相邻位置中只有(1,0)是1,其余要么是0要么越界,所以返回1,符合预期; - 调用
neighbors(array, 2, 2):目标位置是第三行第三列的0,周围合法的相邻位置里有(1,1)、(1,3)、(2,3)三个1,所以返回3,符合预期。
内容的提问来源于stack exchange,提问作者D cph
相关产品推荐
相关产品推荐

