Python:在列表每个5后追加0时列表长度未正确更新的问题
问题原因
你的代码中range(len(mylist1))在循环启动时就生成了基于初始列表长度(7)的索引序列(0到6)。但每次插入0后,列表长度增加,后续元素会向后移位。当处理到第二个5(初始索引5)并插入0后,最后一个5被移到了索引8,而循环只到索引6,导致这个5未被检测到,也就没追加0。
解决方案
方法1:倒序遍历
从列表末尾往前遍历,插入操作不会影响未遍历元素的索引,能确保每个5都被处理:
mylist1 = [1,4,5,2,7,5,5] for i in range(len(mylist1)-1, -1, -1): if mylist1[i] == 5: mylist1.insert(i+1, 0) print(f'output: {mylist1}')
方法2:遍历原列表的副本
通过遍历原列表的副本,保证遍历的是初始状态的所有元素,不受原列表插入操作的影响:
mylist1 = [1,4,5,2,7,5,5] for i, num in enumerate(mylist1.copy()): if num == 5: mylist1.insert(i+1, 0) print(f'output: {mylist1}')
两种方法都能直接修改原列表,得到预期输出[1,4,5,0,2,7,5,0,5,0]。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

