Python斐波那契数列for循环迭代时无法解决list index out of range错误
问题原因分析
- 索引取值错误:当i≥2进入else分支时,当前
listy的长度仅为i(i从0到i-1共i次循环已完成,每次append1个元素),列表索引范围是0 ~ i-1,你调用listy[i]属于访问超出列表长度的位置,直接触发索引越界报错。你需要取的是当前列表的最后两个元素,对应索引应为i-2和i-1,而非i和i-1。 - 循环范围冗余:你使用
range(0, length+1)作为循环范围,最终返回的列表长度为length+1,不符合生成指定长度数列的需求。
修正后代码(保留原有结构)
def attempt2(length): listy=[] for i in range(0,length): # 调整循环次数为length次,生成指定长度的数列 if i == 0: listy.append(1) elif i == 1: listy.append(1) else: listy.append(listy[i-2]+listy[i-1]) # 修正索引为前两项的正确位置 return listy
验证示例
调用attempt2(5)会返回[1, 1, 2, 3, 5],符合长度为5的斐波那契数列预期。
内容的提问来源于stack exchange,提问作者luke.morgan.pg
相关产品推荐
相关产品推荐

