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

Python程序遇IndexError:求句子最长同长连续词链问题求助

问题分析与修复

索引越界的原因

你遇到的IndexError是因为当x指向列表最后一个元素时,x+1超出了列表的索引范围。列表的索引从0开始,比如有n个元素的列表,最大有效索引是n-1。你的循环会遍历len(words)次,当x增加到len(words)-1时,执行words[x+1]就会访问不存在的索引,触发越界错误。

另外你的代码还有两个逻辑缺陷:

  • 循环遍历words的每个元素i,但完全没用到i,属于无效遍历,还会导致循环次数过多
  • 只维护了当前连续长度的单词链,没有记录遍历过程中出现的最长链,最终输出的可能不是真正的最长结果(比如你给出的示例输入,你的代码最后会得到["to", "be"],而不是正确的["To", "be", "or"])

修复后的代码

text = input("Enter text: ")
# 处理标点,转为单词列表(可扩展处理更多标点)
words = text.replace(",", " ").replace(".", " ").replace("!", " ").replace("?", " ").split()

# 边界情况处理
if not words:
    print("No words entered.")
    exit()

# 初始化最长链和当前链,初始为第一个单词
longest_chain = [words[0]]
current_chain = [words[0]]

# 从第二个单词开始遍历
for word in words[1:]:
    # 比较当前单词和当前链最后一个单词的长度
    if len(word) == len(current_chain[-1]):
        current_chain.append(word)
        # 如果当前链比最长链长,更新最长链
        if len(current_chain) > len(longest_chain):
            longest_chain = current_chain.copy()
    else:
        # 长度不同,重置当前链为当前单词
        current_chain = [word]

# 格式化输出结果
print("Longest chain of words with similar length: ", ", ".join(longest_chain))

代码改进说明

  1. 避免索引越界:通过遍历words[1:](从第二个单词开始),每次和current_chain[-1](当前链的最后一个单词)比较长度,完全不需要手动维护索引x,从根源避免了索引越界问题。
  2. 记录最长链:同时维护current_chain(当前连续长度的单词链)和longest_chain(遍历过程中最长的链),每次当前链变长时,就更新最长链。
  3. 边界情况处理:增加了空输入的判断,避免后续代码报错。
  4. 结果格式化:用", ".join()把列表转为符合示例要求的字符串格式。

测试你的示例输入"To be or not to be",会输出:Longest chain of words with similar length: To, be, or,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:45:33