如何删除Python列表中奇数索引的元素?运行报列表索引超出范围错误
报错原因
- 你在正向遍历列表的过程中删除元素,列表的总长度会动态缩短,后续遍历的索引值是基于原始列表长度生成的,就会出现索引大于当前列表最大下标的情况,触发
list index out of range错误 - 另外你使用了
list.remove(元素值)的方法,这个方法会删除列表中第一个匹配的元素值,当列表存在重复元素时,就算不报错也会删错目标位置的元素,按索引删除应该用del 列表[索引]的写法
最优解决方案
直接用列表切片一步完成,切片取步长为2的元素,天然就是所有偶数索引(也就是你要保留的非奇数索引元素),代码如下:
list1 = [12,33,45,66,75,33,4,56,66,67,1,2] list1 = list1[::2] print(list1) # 输出结果:[12, 45, 75, 4, 66, 1]
循环实现方案
如果需要用循环逻辑完成需求,可以先收集所有要删除的奇数索引,再按从大到小的顺序删除,避免删除大索引影响小索引的定位:
list1 = [12,33,45,66,75,33,4,56,66,67,1,2] # 先收集所有要删除的奇数索引 del_indexes = [i for i in range(len(list1)) if i % 2 != 0] # 倒序删除,避免前面的删除操作影响后面的索引对应关系 for i in sorted(del_indexes, reverse=True): del list1[i] print(list1)
内容的提问来源于stack exchange,提问作者Milan_sir7
相关产品推荐
相关产品推荐

