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

Python代码中for循环出现范围错误的原因解析

问题分析与解答

原代码

def frequency_analysis(string):
    count = 0
    freq_list = [
        [[" "] * len(string)],
        []
        ]
    print(freq_list[0])
    for i in range(len(string)):
        print(i)
        freq_list[0][i] = string[i]
        print(freq_list[0])
    return freq_list
print(frequency_analysis("fhfhffffj"))
print(frequency_analysis("jfjf"))

问题描述

这是一项学校作业,仅允许使用len()这一个内置函数。我尝试让freq_list[0]成为输入字符串的单个字符组成的列表,但首次替换操作后,初始创建的列表变为仅含一个元素的列表,随后出现范围错误。

输入"fhh"时的输出如下:

[" "," "," "]
0
"f"
1
Error

错误原因

问题出在freq_list的初始化层级上:

  • 你写的[[" "] * len(string)]是嵌套两层的列表,比如输入"fhh"时,freq_list[0]实际是[[" ", " ", " "]]——它本身是一个长度为1的列表,里面装着另一个长度为3的列表。但你误以为freq_list[0]就是那个长度为3的列表。
  • 第一次循环i=0时,freq_list[0][0] = string[0](即"f"),这一步把freq_list[0]里的子列表直接替换成了单个字符串"f",此时freq_list[0]变成["f"],长度仅为1。
  • 第二次循环i=1时,你试图访问freq_list[0][1],但这个列表现在只有1个元素,自然触发索引越界错误。

要解决只需去掉多余的一层方括号,把[[" "] * len(string)]改成[" "] * len(string),这样freq_list的结构就变成[[" ", " ", " "], []],后续循环替换就能正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:50:28