如何简化Python邻近检测函数,减少逻辑或、与操作?
简化相邻节点检测函数的几种写法
原函数通过重复判断双向坐标偏移实现相邻检测,但存在大量冗余逻辑,以下是几种更简洁且功能完全等价的实现方式:
方法1:利用曼哈顿距离计算
当两个节点的曼哈顿距离为1时,恰好是上下左右相邻的状态,直接计算距离并判断即可:
def prox(p, s): return abs(p[0] - s[0]) + abs(p[1] - s[1]) == 1
方法2:明确判断相邻的两种核心情况
分别计算x、y坐标差的绝对值,判断是否属于「x方向差1且y方向无偏移」或「y方向差1且x方向无偏移」:
def prox(p, s): dx, dy = abs(p[0]-s[0]), abs(p[1]-s[1]) return (dx == 1 and dy == 0) or (dx == 0 and dy == 1)
方法3:匹配相邻坐标差的固定模式
将坐标差的元组与预定义的相邻模式集合对比,逻辑直观清晰:
def prox(p, s): return (abs(p[0]-s[0]), abs(p[1]-s[1])) in {(1, 0), (0, 1)}
以上写法均去除了原函数中重复的双向判断,代码更简洁易读,同时完整保留了原函数的核心功能——检测两个节点是否恰好相距一个单位(上下左右相邻)。
内容的提问来源于stack exchange,提问作者Paulo Corrêa
相关产品推荐
相关产品推荐

