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

Python中更优雅的2D网格坐标范围(0到max_x、0到max_y)校验方法

更优雅的2D网格邻域坐标边界校验方案

你现在先全量生成8邻域坐标再反向pop删越界值的做法可行,但确实不够简洁。其实可以直接在列表推导式里嵌入边界校验条件,一步生成符合要求的邻域列表,完全省去后续的删除操作。

直接在推导式中过滤

这是最直观的优化方式,把边界判断和邻域生成放在同一逻辑里:

max_x = 10
max_y = 12
neighbors = [
    [x+i, y+j]
    for i in (-1, 0, 1)
    for j in (-1, 0, 1)
    if (i != 0 or j != 0)  # 排除单元格自身
    and 0 <= x+i < max_x  # 校验x坐标在合法范围
    and 0 <= y+j < max_y  # 校验y坐标在合法范围
]

这里假设网格坐标是从(0,0)到(max_x-1, max_y-1),如果你的边界规则是包含max_x和max_y,把<改成<=即可。

抽离校验逻辑(适合复杂场景)

如果网格的边界规则可能变化,或者需要多处复用校验逻辑,可以把边界判断抽成独立函数,代码可读性和维护性会更好:

def coord_in_bounds(coord, max_x, max_y):
    cx, cy = coord
    return 0 <= cx < max_x and 0 <= cy < max_y

max_x = 10
max_y = 12
neighbors = [
    [nx, ny]
    for i in (-1, 0, 1)
    for j in (-1, 0, 1)
    if (i != 0 or j != 0)
    and coord_in_bounds((x+i, y+j), max_x, max_y)
]

这两种方式都比先全量生成再删除的做法更高效,也更符合Python的简洁风格——毕竟列表推导式本身就擅长“生成+过滤”的组合逻辑。

内容的提问来源于stack exchange,提问作者futurebird

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:03:17