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

LeetCode句子单词计数问题:循环中计算值未正确追加,始终追加初始化值

问题排查与修复方案

咱们来一步步拆解你代码里的问题,看看为什么单词数总是没被正确追加到列表里:

核心错误分析

  1. 完全错误的追加条件
    你把max_words.append(num_of_words)放在了if j==len(sentences[i][j])-1这个分支里,这里的逻辑彻底跑偏了:sentences[i][j]是句子里的单个字符,它的长度永远是1,所以len(sentences[i][j])-1等于0,这个条件只有当j=0(也就是遍历到句子第一个字符)的时候才会成立。而且这个判断还嵌套在“遇到空格”的if里面,所以只有当句子的第一个字符是空格时,才会触发append,但这时候num_of_words已经变成2了;而正常的句子(开头不是空格)根本不会执行append操作,这就导致你要么得到错误的值,要么列表里只有误触发的初始值1。

  2. 多余的手动循环变量递增
    你在for循环外面写了j+=1和i+=1,这完全没必要——Python的for循环会自动遍历range里的每个值,手动修改循环变量不会影响循环的执行,反而容易造成逻辑混淆。

修复方案

方案1:修复原始遍历逻辑

把max_words.append(num_of_words)移到内层循环的外面,这样每个句子遍历完成后,不管有没有空格,都能把统计好的单词数追加到列表里。同时改用更直观的for-each遍历,避免索引出错:

def mostWordsFound(sentences):
    max_words = []
    for sentence in sentences:
        num_of_words = 1
        for char in sentence:
            if char == " ":
                num_of_words += 1
        # 内层循环结束后,追加当前句子的单词数
        max_words.append(num_of_words)
    print(max_words)
    # 如果需要返回最大单词数,可以加 return max(max_words)

sentences = ["please wait.", "continue to fight.", "continue to win."]
mostWordsFound(sentences)

方案2:用Python内置方法简化逻辑

其实完全不用手动遍历字符数空格,Python的str.split()方法可以直接帮你把句子按空白字符分割成单词列表,然后取列表长度就是单词数,这个方法还能自动处理多个空格、开头结尾空格的情况,鲁棒性更强:

def mostWordsFound(sentences):
    max_words = [len(sentence.split()) for sentence in sentences]
    print(max_words)
    # 需要返回最大数的话,直接 return max(max_words)

sentences = ["please wait.", "continue to fight.", "continue to win."]
mostWordsFound(sentences)

运行这两个修复后的代码,你的测试用例都会输出[2, 3, 3],完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:22:43