Python遍历列表删除元素时偶数14未被提取的问题求助
问题:提取列表偶数时出现遗漏
你的代码:
data = [9,4,5,17,12,14,1,0,3,10,9] even = [] for item in data: if (item % 2) == 0: data.remove(item) even.append(item) else: pass
运行结果:
muyiwa@mobadara-pc:~/Documents/projects/DSA-2/Unit2$ python fixed_.code.py The even elements are: [4, 12, 0, 10] The odd elements are: [9, 5, 17, 14, 1, 3, 9]
问题原因:
你在遍历列表的同时修改了原列表,这会打乱迭代器的遍历顺序。比如当循环处理12时,它被移除后原列表元素向前移位,原本在12后的14会移动到12的索引位置,但迭代器已经走到下一个索引,直接跳过了14的检查,导致它被错误留在奇数列表里。
解决方案:
方案1:遍历原列表的副本
修改原列表时不干扰遍历过程:
data = [9,4,5,17,12,14,1,0,3,10,9] even = [] # 遍历data的副本,避免修改原列表影响遍历 for item in list(data): if item % 2 == 0: data.remove(item) even.append(item) print(f"The even elements are: {even}") print(f"The odd elements are: {data}")
方案2:创建新列表分别存储(推荐)
不修改原列表,直接生成偶数、奇数新列表,逻辑更清晰:
data = [9,4,5,17,12,14,1,0,3,10,9] even = [] odd = [] for item in data: if item % 2 == 0: even.append(item) else: odd.append(item) print(f"The even elements are: {even}") print(f"The odd elements are: {odd}")
方案3:列表推导式(简洁写法)
用Python列表推导式一行生成目标列表,代码更简洁:
data = [9,4,5,17,12,14,1,0,3,10,9] even = [item for item in data if item % 2 == 0] odd = [item for item in data if item % 2 != 0] print(f"The even elements are: {even}") print(f"The odd elements are: {odd}")
以上三种方法运行后,14都会被正确识别为偶数加入even列表,奇数列表里不会再出现它。
内容的提问来源于stack exchange,提问作者mobadara
相关产品推荐
相关产品推荐

