Codecademy编程题:double_index函数报'int is not iterable'错误求助
解决你的
double_index函数报错问题 嗨,我来帮你搞定这个问题~你的代码里有两个需要修正的地方,先从报错的根源说起:
1. 为什么会出现int is not iterable错误?
你这里的list(double_value)用法错了!double_value是一个整数(比如原列表对应位置元素是3,那它就是6),而list()函数要求传入可迭代对象(比如字符串、列表、元组这类能逐个取出元素的东西),整数不属于可迭代对象,所以Python会报错说“整数不能被迭代”。
你真正想做的是把这个双倍后的整数变成一个单元素列表,这样才能和前后的切片(lst[:index]和lst[index+1:]都是列表)拼接。所以应该把list(double_value)改成[double_value]——用方括号直接创建一个只包含这个整数的列表就好啦。
2. 索引判断的逻辑错误
原代码里的if index <= len(lst) and index >0:有两个问题:
- 列表的索引是从0开始的,你写
index>0就把合法的索引0排除了,比如传入index=0会直接返回原列表,这不符合需求; index <= len(lst)会把超出范围的索引当成有效索引,比如列表长度是3,索引3是不存在的,这时候lst[index]会触发新的索引越界错误。
正确的有效索引判断应该是0 <= index < len(lst)——确保索引在合法的范围内(从0到列表长度减1)。
修正后的完整代码
def double_index(lst, index): # 判断索引是否在合法范围内 if 0 <= index < len(lst): double_value = lst[index] * 2 # 用单元素列表和切片拼接出新列表 new_lst = lst[:index] + [double_value] + lst[index+1:] return new_lst else: return lst
测试示例
- 调用
double_index([1, 2, 3], 1),返回[1, 4, 3],符合预期; - 调用
double_index([5, 10], 0),返回[10, 10],正确处理了索引0的情况; - 调用
double_index([7], 1),返回原列表[7],因为索引1超出了范围。
内容的提问来源于stack exchange,提问作者Sean Soo
相关产品推荐
相关产品推荐

