对于此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]
为此,我们是否也更改列表长度?为什么列表长度在反向范围内没有关系?
答案 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