为什么这段Python代码输入大于4的整数后无法得到正确结果?
代码逻辑错误原因
你代码运行结果不符合预期的核心原因是在正序遍历列表的同时直接删除列表元素,会触发列表索引动态偏移,导致部分元素被跳过未检查:
- 列表的for循环遍历本质是按索引依次取值,指针从索引0开始,每轮循环结束后索引+1取下一个元素
- 当你删除当前索引位置的元素后,列表中该位置后面的所有元素都会自动往前挪一位,索引整体减1
- 此时循环指针还是按原定规则+1进入下一轮,就会跳过原本排在被删元素后一位的元素,导致该元素没有被检查是否符合删除条件
举你输入n=4的场景为例:
原始列表索引0对应元素the,长度3<=4触发删除,删除后原索引1的quick变为新的索引0;下一轮循环指针走到索引1,直接取到原索引2的brown,quick就被跳过没有检查,最终导致结果错误。
替代实现方案
列表推导式(推荐)
直接生成符合要求的新列表,不会出现遍历修改的冲突问题:
lst = ['the','quick','brown','fox','afjibhjkvh','afkjbrjv','hscb','kejfbaejkbv','jadbvjkfbv'] n = int(input('Enter length of words')) res = [word for word in lst if len(word) > n] print(res)
倒序遍历修改原列表
如果必须操作原列表,可倒序遍历索引,删除元素不会影响还未遍历的前半部分索引:
lst = ['the','quick','brown','fox','afjibhjkvh','afkjbrjv','hscb','kejfbaejkbv','jadbvjkfbv'] n = int(input('Enter length of words')) for idx in range(len(lst)-1, -1, -1): if len(lst[idx]) <= n: del lst[idx] print(lst)
内容的提问来源于stack exchange,提问作者jae
相关产品推荐
相关产品推荐

