Python移除列表起始偶数函数异常:全偶数列表未清空问题
解决列表持续移除首个偶数元素的问题
你的代码问题出在用for循环遍历列表的同时修改列表。Python的for循环基于初始列表的迭代器创建,当执行lst.pop(0)时,列表元素向前移位,但迭代器的位置不会同步调整,导致部分元素被跳过,无法持续检查新的列表首个元素。
以测试用例[4,8,10]为例,执行过程如下:
- 初始迭代器指向第一个元素4,进入循环后pop(0),列表变为
[8,10] - 迭代器移动到下一个位置,取到原列表的第三个元素10,进入循环
- 此时检查
lst[0]是8(偶数),执行pop(0),列表变为[10] - 迭代器已走完所有初始元素,循环结束,剩下的
[10]未被处理
改用while循环即可解决该问题,它会持续检查当前列表的首个元素,直到列表为空或首个元素不是偶数:
def delete_starting_evens(lst): while lst and lst[0] % 2 == 0: lst.pop(0) return lst print(delete_starting_evens([4, 8, 10, 11, 12, 15])) # 输出 [11, 12, 15] print(delete_starting_evens([4, 8, 10])) # 输出 []
内容的提问来源于stack exchange,提问作者gix
相关产品推荐
相关产品推荐

