letter = ['A','B','C','D','D','D']
for i in letter:
print("当前遍历\t", i,end="\t")
if i == 'D':
letter.remove(i)
print("remove", i , "\tafter\t", letter, end="")
print("")
print("结果", letter)
由于列表的可变性,在循环中改变了列表,循环到下标3删除了第一D后,列表缩短,循环到4已经是列表最后一项,所以中间的D被跳过了。所以最好不要在循环中改变列表,循环列表的时候最好用li[:]来获得列表的副本
因为for循环在根本上是根据索引的下标来取值的,如letter[0],letter[1],letter[2] ....这样依次取。取值的同时列表的元素个数也在发生变化,无删除操作的时候本可以取到letter[5],现在删除了最后一个值,就最多刚好取的letter[4],且在最后一次循环时将letter[4]删除。然后循环执行结束。