为什么我的Python代码仅重复第一个零,未处理列表中的其他零?
代码问题原因分析
- return语句位置错误
你将return a写在了for循环的内部,第一次循环执行到符合条件的插入操作后,函数就直接返回了处理结果,不会继续遍历后续元素,自然无法处理剩余的0。 - 遍历逻辑错误
你写的for i in a是直接遍历列表的元素值,而非列表索引,后续代码中用a[i]取值属于逻辑错误,示例输入中第一个元素为1、a[1]刚好为0属于巧合,若列表元素值大于等于列表长度时会直接触发索引越界报错。 - insert方法参数使用错误
list.insert()的第一个入参要求为插入位置的索引,你传入的a[i+1]是列表对应位置的元素值,而非索引,此处逻辑完全错误,只是你的示例输入刚好匹配才没有触发异常。 - 遍历同时修改列表导致索引偏移
就算修正上述三个问题,如果你正向遍历列表的同时插入元素,会导致后续遍历的位置偏移,导致重复处理新插入的0,出现无限循环或者多插入多余0的问题。
修正后的实现方案
建议反向遍历列表的原始索引,避免插入新元素对未处理的索引产生影响,参考代码如下:
def addzeros(a): # 从最后一位向前遍历,避免插入操作影响未处理位置的索引 for i in range(len(a)-1, -1, -1): if a[i] == 0: a.insert(i+1, 0) return a print(addzeros([1,0,2,0,7]))
运行输出为:[1, 0, 0, 2, 0, 0, 7],符合给所有原始0后插入一个0的需求。
内容的提问来源于stack exchange,提问作者Sairaj Dhonnar
相关产品推荐
相关产品推荐

