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

如何在嵌套列表中检测2x2 G区块并修复索引错误

问题修复:检测并替换2x2 G区块的索引错误

核心问题分析

  1. 索引越界根源:你在判断条件中先访问了lst[row][col+1],再做边界检查col + 1 < len(lst_row)。当col是当前行的最后一个索引时,col+1已经超出列表范围,直接访问会触发IndexError。必须先做边界检查,再访问元素。
  2. 赋值错误:你用了比较运算符==而非赋值运算符=,等于没有修改任何值。
  3. 引用无效:item、right等是原列表元素的临时引用,修改这些变量不会同步到原列表,必须直接通过列表索引修改元素。

修复后的代码

lst = [["S", "V", "G", "S"], ["V", "G", "S", "V"], ["V", "G", "G", "S"], ["V", "V", "V", "V"]]

for row, lst_row in enumerate(lst):
    # 只遍历到倒数第二行,避免row+1越界
    if row >= len(lst) - 1:
        break
    # 只遍历到倒数第二列,避免col+1越界
    for col in range(len(lst_row) - 1):
        current = lst[row][col]
        right = lst[row][col+1]
        down = lst[row+1][col]
        down_right = lst[row+1][col+1]
        
        # 检查是否为2x2的G区块
        if current == right == down == down_right == "G":
            # 直接修改原列表的对应位置
            lst[row][col] = "X"
            lst[row][col+1] = "X"
            lst[row+1][col] = "X"
            lst[row+1][col+1] = "X"

# 打印验证结果
for row in lst:
    print("  ".join(row))

关键修改说明

  • 外层循环限制遍历到倒数第二行,内层循环限制遍历到倒数第二列,从根源杜绝索引越界;
  • 通过列表索引直接修改元素,确保修改同步到原列表;
  • 用链式比较简化条件判断,逻辑更清晰;
  • 明确只匹配值为"G"的2x2区块,符合需求。

运行结果

S  V  G  S
V  X  X  V
V  X  X  S
V  V  V  V

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:32:42