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

Python网格单词匹配函数sleuth运行返回None问题排查

代码存在的两个核心问题

1. 语法层面:return语句缩进错误

你给出的sleuth函数中,最后一行return l的缩进多了1个空格,和外层for循环的缩进层级不匹配。如果你的运行环境没有抛出缩进错误反而返回None,大概率是实际代码中return被错误缩进在了for循环内部,循环第一次判断结束就提前返回了空值。

2. 逻辑层面:子串匹配逻辑错误

你当前封装的diagsUpRight/diagsDownRight/rows/cols四个函数,返回的都是整行、整列、整对角线拼接后的完整长字符串列表,比如第一行拼接结果是rawbit,你要匹配的目标单词raw是这个长字符串的子串,而不是列表中的独立元素。你直接用if word in rows(grid)判断的是word是否是列表的元素,自然匹配不到结果。

修复后的代码

首先调整匹配逻辑,把判断单词是否在列表中,改成判断单词是否是任意长串的子串,同时修正缩进:

def diagsDownRight(M):
    n = len(M)
    m = [[''] * (n - i - 1) + row + [''] * i for i, row in enumerate(M)]
    return [''.join(col) for col in zip(*m)]+[''.join(col[::-1]) for col in zip(*m)]

def diagsUpRight(M):
    n = len(M)
    m = [['']*i + row + ['']*(n-i-1) for i, row in enumerate(M)]
    return [''.join(col) for col in zip(*m)]+[''.join(col[::-1]) for col in zip(*m)]

def rows(M):
    return ["".join(row) for row in M]+["".join(reversed(row)) for row in M]

def cols(M):
    return ["".join(col) for col in zip(*M)]+ [''.join(col[::-1]) for col in zip(*M)]

def sleuth(grid: list[list[str]], words: list):
    l = []
    # 提前把所有方向的长串都取出,避免重复计算
    all_lines = diagsUpRight(grid) + diagsDownRight(grid) + rows(grid) + cols(grid)
    for word in words:
        # 只要单词是任意长串的子串就加入结果
        if any(word in line for line in all_lines):
            l.append(word)
    return l

你给出的测试用例grid定义缺了外层左中括号,修正后测试代码:

grid = [
["r","a","w","b","i","t"],
["x","a","y","z","c","h"],
["p","a","b","e","i","e"],
["t","r","s","b","o","g"],
["u","t","x","v","i","t"],
["n","m","r","w","o","t"]]
words = ["bog", "moon", "rabbit", "the", "bit", "raw"]
print(sleuth(grid, words))

运行输出:['bog', 'rabbit', 'the', 'bit', 'raw'],和预期结果一致,顺序差异可以根据需要调整排序逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:15:08