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

Python中使用数组时触发Index Error错误求助

解决索引越界错误并修复字符串匹配逻辑

嘿,我看到你在尝试构建逐字符修改的字符串时遇到了问题,咱们来拆解一下故障原因并修复它!

问题1:索引越界的根源

你代码里的这个部分是触发错误的关键:

index = random.randint(0, len(target))

因为guess列表的长度和target一致,都是len(target),而Python列表的索引是从0开始的,最大有效索引是len(target)-1。但random.randint(a, b)会生成包含a和b在内的随机整数,所以当它生成len(target)这个值时,访问guess[index]就会超出列表的有效索引范围,直接抛出索引越界错误。

问题2:列表与字符串的类型不匹配

另外还有一个隐藏问题:你用列表guess和字符串target直接比较guess != target,这会导致循环永远无法终止——因为列表和字符串是不同的数据类型,它们永远不会相等。你需要把guess列表转换成字符串再和target比较。

修正后的完整代码

import random
geneSet = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!."
target = "Hello World!"
# 初始化guess列表,长度和target一致
guess = [random.choice(geneSet) for _ in range(len(target))]

while ''.join(guess) != target:
    # 生成0到len(target)-1之间的随机索引(包含两端)
    index = random.randint(0, len(target)-1)
    guess[index] = random.choice(geneSet)

# 循环结束后输出结果
print(''.join(guess))

关键修改点说明

  • 把random.randint(0, len(target))改成random.randint(0, len(target)-1),确保索引始终在有效范围内
  • 循环条件改为''.join(guess) != target,将列表转为字符串后再和目标字符串比较
  • 用列表推导式简化了guess的初始化代码,更简洁直观

这样修改后,代码就能正常运行,最终会逐字符逼近并输出目标字符串Hello World!啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:29:31