从列表移除偶数元素时遇索引越界问题,求简易实现代码
解决列表移除偶数时索引越界的问题
你遇到的索引越界问题,是因为遍历列表时直接删除元素会导致列表长度变短,后续的索引会超出新列表的范围。给你几个简单易懂的解决方案,适合初学者:
方法1:新建列表存奇数(最安全易理解)
不修改原列表,直接遍历每个元素,把奇数挑出来放进新列表:
original_list = [1, 2, 3, 4, 5] odd_list = [] for num in original_list: # 判断是否为奇数:除以2余数不为0 if num % 2 != 0: odd_list.append(num) print(odd_list) # 输出 [1, 3, 5]
方法2:列表推导式(Python简洁写法)
这是Python常用的简化写法,和方法1逻辑一致,但代码更短:
original_list = [1, 2, 3, 4, 5] odd_list = [num for num in original_list if num % 2 != 0] print(odd_list)
方法3:倒序遍历修改原列表
如果一定要直接修改原列表,就得从后往前遍历。这样删除元素时,不会影响前面未遍历的元素索引:
original_list = [1, 2, 3, 4, 5] # 从最后一个索引开始,到第一个索引结束,步长为-1(倒着走) for i in range(len(original_list)-1, -1, -1): if original_list[i] % 2 == 0: del original_list[i] print(original_list) # 输出 [1, 3, 5]
推荐初学者先掌握前两种方法,尤其是列表推导式,既简洁又不容易出错。
内容的提问来源于stack exchange,提问作者Dweep Desai
相关产品推荐
相关产品推荐

