You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义邻域范围,校验二维坐标及其相近值是否存在于列表中

可配置邻域范围的坐标过滤实现方案

核心逻辑

你需要的邻域过滤本质是校验新坐标与已有坐标的x轴差值绝对值和y轴差值绝对值是否都小于等于自定义范围,无需手动枚举所有偏移组合。

实现代码

方案1:遍历已有坐标校验(适合数据量小、邻域范围大的场景)

# 自定义邻域范围,可自由修改
neighbor_range = 2
cord_exist = False

for (x_exist, y_exist) in data:
    if abs(x_exist - x_cor) <= neighbor_range and abs(y_exist - y_cor) <= neighbor_range:
        cord_exist = True
        break # 命中就提前终止,减少不必要的遍历

if not cord_exist:
    data.append([x_cor, y_cor])

方案2:集合查询校验(适合数据量大、邻域范围小的场景,性能更高)

提前将坐标转为元组存入集合,利用集合O(1)的查询速度提升效率,无需每次遍历全量数据:

# 初始化时同步维护一个坐标集合,后续新增坐标时同步更新即可
data_set = set(tuple(coord) for coord in data)
# 自定义邻域范围
neighbor_range = 2
cord_exist = False

# 遍历所有偏移组合,查询是否有命中的已有坐标
for dx in range(-neighbor_range, neighbor_range + 1):
    for dy in range(-neighbor_range, neighbor_range + 1):
        if (x_cor + dx, y_cor + dy) in data_set:
            cord_exist = True
            break
    if cord_exist:
        break

if not cord_exist:
    data.append([x_cor, y_cor])
    data_set.add((x_cor, y_cor)) # 同步更新集合,保证后续查询正确性

补充说明

  • 两种方案都默认覆盖了「新坐标本身已经存在于data中」的过滤逻辑,符合你示例中完全相等的坐标也会被拦截的需求
  • 如果你的过滤规则是仅x或y任意一个差值在范围内就拦截,只需把判断条件里的and改成or即可

内容的提问来源于stack exchange,提问作者D.Moore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:15:05