Python 删除索引满足条件的每个元素;列表分配索引超出范围

Python 删除索引满足条件的每个元素;列表分配索引超出范围,python,iteration,Python,Iteration,我在做一个练习,其中一个函数接受一个列表和一个整数n,如果其索引I满足(I+1)%n==0,则删除每个元素。以下是我的想法: def f(lst, n): for i in range(len(lst)): if (i+1)%n==0: del lst[i] 但是,它给了我这个错误: Traceback (most recent call last): File "<stdin>", line 1, in <module

我在做一个练习,其中一个函数接受一个列表和一个整数
n
,如果其索引
I
满足
(I+1)%n==0
,则删除每个元素。以下是我的想法:

def f(lst, n):
    for i in range(len(lst)):
        if (i+1)%n==0:  
            del lst[i]
但是,它给了我这个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pop.py", line 4, in f
    del lst[i]
IndexError: list assignment index out of range
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“pop.py”,第4行,在f中
del lst[i]
索引器:列表分配索引超出范围

索引指针
i
似乎无法超出范围?发生这种情况的原因是什么?

您使用的是什么数据集? 根据数据集中的数字,问题在于您正在从列表中删除对象,当您请求列表中的特定索引时会产生冲突

ex_list = [2, 5, 12]
print range(len(ex_list))

output [0, 1, 2]
因此,假设第一个项目没有通过测试并被删除。现在,您的列表如下所示:

ex_list
>>>[5, 12]
问题是for循环中的下一个i将是1,但现在:

ex_list[1]
>>>12
最终:

ex_list[2]
>>>IndexError: list assignment index out of range

发生的情况是,当您从列表中删除一个元素时,您的列表大小正在改变

您不必迭代列表来查找可被n整除的索引。
例如,如果list_length=8,n=2,那么我们知道元素#[2,4,6,8]=索引[1,3,5,7]必须删除。你可以在这里创建一个过滤器或者像这样的列表-

new_list = [old_list[i] for i in range(len(old_list_length)) if (i+1) % n == 0]
old_list = new_list
注意:-您可以注意迭代列表,其中一个元素已被删除,因为您要删除的原始元素现在将具有不同的索引。按照答案开头的示例:-
假设您已经删除了
元素2(index=1)
,现在后续的
元素4、8将变成
元素3、7
,因此,现在您无法跟踪要删除列表的原始元素。

请提供示例数据,以便于说明和测试。如果可能重复,请考虑从列表中删除项目时会发生什么。此列表的长度将更改。