如何检查二维0-1列表中无1接触边界?代码返回结果异常排查
问题分析与修复
原代码的核心逻辑完全错误:
- 仅检查了第一列和硬编码的第五行(
pool[4][l]),没覆盖所有边界(第一行、最后一列) - 循环第一次迭代就触发
elif条件直接返回"legitimate",根本没完成所有边界的检查
比如第一次循环r=0、l=0时,pool[0][0]是0,直接进入elif返回合法,完全忽略了第三行第一列的1这类边界违规情况。
修复后的代码
pool = [[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [1, 1, 1, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0]] def is_legitimate_pool(pool): rows = len(pool) if rows == 0: return "legitimate" cols = len(pool[0]) # 检查第一行和最后一行的所有元素 for col in range(cols): if pool[0][col] == 1 or pool[-1][col] == 1: return "illegitimate" # 检查第一列和最后一列的中间行(跳过已检查的首尾行) for row in range(1, rows-1): if pool[row][0] == 1 or pool[row][-1] == 1: return "illegitimate" # 所有边界无1则合法 return "legitimate" print(is_legitimate_pool(pool)) # 输出: illegitimate
修复说明
- 用总行数、总列数替代硬编码索引,让函数适配任意大小的二维列表
- 分两部分覆盖所有边界:第一行/最后一行的全部列,以及第一列/最后一列的中间行
- 只要发现边界存在1就立即返回非法,遍历完所有边界无问题才返回合法
内容的提问来源于stack exchange,提问作者etena_fantom
相关产品推荐
相关产品推荐

