Python:列出循环删除故障的索引

Ole*_*kin 0 python indexing for-loop list del

这是一个非常棘手的问题需要解释.我正在玩Python的列表方法,特别是del索引对象.我想创建一个简单的脚本,它将创建一个从1到100的整数列表,然后是一个for循环,它将从列表中删除奇数.

这是我写的脚本:

def main():
    num = list(range(1,101))
    print(num)
    for i in range(0,101):
        del num[i]
    print(num)
main()
Run Code Online (Sandbox Code Playgroud)

好像它会起作用吗?我也这么认为,直到我跑了.

我不知道为什么,但是当i传递给del num[i]索引时,数字本身翻了一番.

当我跑的时候,我收到了IndexError: list assignment index out of range.

当我从改变的参数range(0,101)range(0,10),我发现它删除了所有的奇数从1到20.

换句话说,i在索引加倍时它不应该.我能获得一些有关此事的信息吗?

Fil*_*und 6

删除项目时,列表的大小会减小.在大约50次循环迭代之后,列表中有大约50个项目,因此嵌套迭代尝试删除列表外的内容.

这是一个模拟运行:

>>> a = [1, 2, 3, 4, 5]
>>> a
[1, 2, 3, 4, 5]
>>> del a[0]
>>> a
[2, 3, 4, 5]
>>> del a[1]
>>> a
[2, 4, 5]
>>> del a[2]
>>> a
[2, 4]
>>> del a[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
Run Code Online (Sandbox Code Playgroud)