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
相关产品推荐
相关产品推荐

