尝试使用for循环从列表中删除项目时,反向范围与正常范围

时间:2019-01-03 07:29:15

标签: python python-3.x for-loop

对于此for循环,此代码:

lst = ['NORTH', 'SOUTH', 'EAST', 'EAST']

for num in range(0, len(lst) - 1):
    if lst[num] == 'NORTH' and lst[num + 1] == 'SOUTH':
        del lst[num]
        del lst[num - 1]

我知道它不起作用,因为通过删除列表中的项目,len(lst)会更改,但是,为什么这样起作用:

for num in range(len(lst) - 1 , -1 , -1):
    if lst[num] == 'SOUTH' and lst[num - 1] == 'NORTH':
        del lst[num]
        del lst[num - 1]

为此,我们是否也更改列表长度?为什么列表长度在反向范围内没有关系?

1 个答案:

答案 0 :(得分:0)

就像DYZ在评论中所说的那样,使用反向索引,您可以更改已经处理过的项目的索引,因此代码在继续执行时不会失败。

但是,您似乎很幸运,因为您一次要删除两个项目。如果将输入列表更改为该列表,它将仍然失败并显示IndexError

lst = ['EAST', 'EAST', 'NORTH', 'SOUTH']

如果要执行这样的列表操作,最好使用while循环。

num = 0
while num < len(lst) - 1:
    if lst[num] == 'NORTH' and lst[num + 1] == 'SOUTH':
        del lst[num]
        del lst[num - 1]
    else:
        num += 1