Python列表每个元素后删除n个元素的实现与错误排查
问题原因
- 你在遍历列表的同时调用
pop方法删除元素,会直接导致列表的动态长度发生变化,你维护的case_index和遍历迭代器都会出现错位,这是得到间隔删除错误结果的核心原因。 - 你当前的删除逻辑也不符合需求:你设定的是
case_count不等于7时就删除元素,反而会把你需要保留的元素误删。
正确实现方案
方案1:列表切片(最简洁高效)
你的需求是每保留1个元素就删除后续的7个元素,本质就是取列表步长为7+1=8的元素,一行代码就能实现:
n = 7 res = cases[::n+1]
你给出的示例列表运行后得到的结果就是[1, 9, 17],完全符合预期。
方案2:手动遍历实现(适合需要自定义逻辑的场景)
如果要自己写遍历逻辑,不要在遍历原列表的时候修改它,可以通过构建新列表实现:
n = 7 res = [] to_keep = True skip_cnt = 0 for num in cases: if to_keep: res.append(num) to_keep = False skip_cnt = 0 else: skip_cnt += 1 if skip_cnt == n: to_keep = True
内容的提问来源于stack exchange,提问作者Supreme1707
相关产品推荐
相关产品推荐

